Français
Forum

Quellcode beschleunigen

 

Andreas
Koch
allô zusammen,

je devrait pour Possibilité une partie meines Programms um Einiges beschleunigen.

Dabei handelt es sich um une Procédure, qui entweder une Reihe de Variablen transfert volonté ou bien qui direct sur qui globalen Variablen zugreifen muss. chez den Variablen handelt es sich aktuell (encore) um Arrays. qui gesamte Quellcode nimmt so à 40 Zeilen un. courir devrait cela Ganze sur einem 64-bit System.

quelle Opportunités gibt es là pour mich?
Im le doute habe je qui Themengebiete: Assembler, XPIA, XPSE, Profan2CPP et "natives" Programmieren.
avec welchem Thema sollte je mich là näher beschäftigen?

avec freundlichen Grüßen

Andreas Koch
 
07.08.2012  
 



Grüße!

Nimmste simple nProcs: [...]  -

quasi natives Profan oui c'est ca pour Deinen Zweck entwickelt.

Gibt ici aussi déjà très viele Funktionen jeweils comme Proc et nProc posté -

simple informer. Brauchst un konkretes Beispiel?
 
07.08.2012  
 




Andreas
Koch
allô iF,

merci pour qui entschiedene Antwort. cela spart Zeit. un konkretes Beispiel wäre pas mal, am Besten avec Übergabe de Arrays.
Gibt es une Anhaltspunkt, um combien cela Ganze ensuite plus rapide wird?
 
07.08.2012  
 



Je pour opération avons wir déjà gemessen cela une nProc 2.000 la fois plus rapide

comme une Proc son peux. dans nProcs peux aussi Assembler verwenden. Schreib simple

la fois un kleines Beispielprogramm avec einer Proc et ensuite fais je Dir daraus une

nProc.
 
07.08.2012  
 




Andreas
Koch
2000 la fois plus rapide ist Musik dans meinen Ohren.
un vernünftiges Beispiel peux je allerdings seulement demain erstellen, là Je l' Programmcode pas trop Hause habe.

Wünsche wohl trop ruhen.
 
07.08.2012  
 




Andreas
Koch
allô iF,
ici habe je maintenant cela Beispiel.

j'ai mon Procédure encore einmal dans deux kleinere gesplittet, qui quelque chose übersichtlicher sommes. cela Plénier cela Gaußsche Eliminationsverfahren pour une Matrix beliebiger Taille et beliebig vielen Vektoren sur qui rechten page figurer. Vorraussetzung pour qui Lösbarkeit sommes qui Singularität qui Matrix et sämtliche Einträge sur qui Diagonalen<>0.

là qui beiden Prozeduren seulement zusammen Sinn ergeben, habe je vous beide angehängt.

si du eh bien qui Procédure "Solver" dans un nProc transformer könntest, wäre cela une prima l'affaire. je serait mich ensuite anschließend avec qui Procédure "Dreiecksmatrix" befassen.
KompilierenMarqueSéparation
cls
var size!=6
Declare A![size!-1,size!-1], Zeile&, Spalte&, Diagonale&, Faktor!, aux!,Lastenarray![0,size!-1],Lastfall%,Verschiebungsarray![0,size!-1]
'Erzeugung zweier Zufallsmatrizen

WhileLoop 0,size!-1

    Spalte&=&loop

    WhileLoop 0,size!-1

        Zeile&=&loop
        A![Spalte&,Zeile&]=Rnd()

        If Zeile&<1

            Lastenarray![Zeile&,Spalte&]=Rnd()

        EndIf

    EndWhile

EndWhile

'Umformung, Erzeugung einer Dreiecksmatrix

proc Dreiecksmatrix

    WhileLoop 0,size!-1,1

        Diagonale&=&loop

        WhileLoop Diagonale&+1,size!-1,1

            Zeile&=&loop
            Faktor!=A![Diagonale&,Zeile&]/A![Diagonale&,Diagonale&]

            if Faktor!<>0

                WhileLoop 0

                    Lastfall%=&loop
                    Lastenarray![Lastfall%,Zeile&]=Lastenarray![Lastfall%,Zeile&]-Faktor!*Lastenarray![Lastfall%,Diagonale&]

                EndWhile

                WhileLoop 0,size!-1,1

                    Spalte&=&loop
                    A![Spalte&,Zeile&]=A![Spalte&,Zeile&]-Faktor!*A![Spalte&,Diagonale&]

                EndWhile

            EndIf

        EndWhile

    EndWhile

EndProc

'Rücksubstitution

Proc Solver

    Parameters Lastfall%

    WhileLoop size!,1,-1

        Diagonale&=&loop-1
        aux!=0

        WhileLoop Diagonale&+1,size!-1,1

            Spalte&=&loop
            aux!=aux!+A![Spalte&,Diagonale&]*Verschiebungsarray![Lastfall%,Spalte&]

        EndWhile

        Verschiebungsarray![Lastfall%,Diagonale&]=(Lastenarray![Lastfall%,Diagonale&]-aux!)/A![Diagonale&,Diagonale&]

    EndWhile

EndProc

Dreiecksmatrix
Solver(0)
> WaitInput

PS: si irgendjemandem un faute im Code auffällt, insbesondere un erreur de calcul, s'il te plaît je tout autor, mich par-dessus trop informer.

PPS: peux on avec einer nProc aussi cela Zeichnen sur einer Bitmap beschleunigen?
 
08.08.2012  
 



bien sûr aussi cela Zeichnen beschleunigen, peux alles avec faire -
gibt oui quasi unendlich viele Anwendungsgebiete. Ist arrêt natives
"Profan" avec allen APIs.

Sinus: [...] 
le sable sur Kugel: [...] 
ici ne Include Pixels.inc: [...] 
ici Ameisenpixel aus eigenem Fil: [...] 
et entier important qui hPic.inc: [...] 

ou bien autre Beispiele pour nProc-Verwendung:

asyncMsgBox.inc - Rückmeldungen asynchroner MessageBoxen: [...] 
Canvas.inc: [...] 
CanvasListBoxen: [...] 
Keyboardhook pour Utilisateur Messages: [...] 
miclevel-inc-mikrophon-eingangslautstaerke: [...] 
OGL-2DUI: [...] 
RGB-Funktionen: [...] 

...

ce sont seulement un paire... gibt mtlw. so viel Schnulli... aussi chez den Comprend: [...] 

cela ici ist super: [...] 
et devrait Dir la fois anschauen - avec quelque chose comme kamma aussi entier vite simple
Jeux herzaubern comment z.B. den Hubi: [...] 



Votre Code peux je mir probablement seulement ce soir genauer regarder -
maintenant muss je erstmal zum dentiste.
 
08.08.2012  
 




Andreas
Koch
là scheint es oui alles Mögliche trop donner. cela werde je mir la fois dans Ruhe anschauen doit. sur jeden le cas merci pour qui Aider.
 
08.08.2012  
 



Alors,

lass uns cela s'il te plaît zusammen erarbeiten sodass ensuite aussi bien sûr ist,
comme funktioniert et pourquoi.

nProcs sommes Fil- et APC ( [...]  )- sûrement et unheimlich
vite, weil qui Code comme Maschinencode fonctionnement wird.

avec cela nProcs Fil- et APC-sûrement son peut, peux sur globale
Variablen seulement lesend zugegriffen volonté, sei car, on koordiniert
qui Schreibzugriffe z.B. per Semaphore ( [...]  ) .

qui sauberste et schnellste nProc venez sans globale Variablen aus et
verarbeitet qui comme paramètre übergebenen Werte trop einem Rückgabewert.
Lokale Variablen (alors dans qui nProc échelle Variablen) wiederum peux on
so viele déclarer comment on voudrais.

Beispiel:
KompilierenMarqueSéparation
aussi mögliche Syntax:
KompilierenMarqueSéparation
Weitere mögliche Syntax:
KompilierenMarqueSéparation
Votre Proc solver verwendet cependant globale Variablen et überschreibt
aussi qui Inhalte. alors wäre qui erste Schritt, cet Procédure so umzuschreiben,
dass son qui verwendeten Arrays comme paramètre transfert volonté et
qui Rückgabewert conforme à cela un Array ist sodass vous pour sich alleine
seulement cela verarbeitet quoi son comme paramètre transfert wurde sans cela vous sich
quoi aus dem Hauptprogramm téter muss. c'est aussi indépendant de nProc
chez Procs qui vorzuziehende ou bien "saubere" Programmiertechnik.

peux Du cela fix ajuster?
 
09.08.2012  
 




Andreas
Koch
Ok, Problematik verstanden. ici ist qui neue Code, wobei maintenant alle Variablen transfert ou bien interne deklariert volonté.
KompilierenMarqueSéparation
cls
var size!=6
Declare A![size!-1,size!-1], Zeile&, Spalte&, Diagonale&, Faktor!, aux!,Lastenarray![0,size!-1],Lastfall%,Verschiebungsarray![0,size!-1]
Lastfall%=0
'Erzeugung zweier Zufallsmatrizen

WhileLoop 0,size!-1

    Spalte&=&loop

    WhileLoop 0,size!-1

        Zeile&=&loop
        A![Spalte&,Zeile&]=Rnd()

        If Zeile&<1

            Lastenarray![Zeile&,Spalte&]=Rnd()

        EndIf

    EndWhile

EndWhile

'Umformung, Erzeugung einer Dreiecksmatrix

proc Dreiecksmatrix

    WhileLoop 0,size!-1,1

        Diagonale&=&loop

        WhileLoop Diagonale&+1,size!-1,1

            Zeile&=&loop
            Faktor!=A![Diagonale&,Zeile&]/A![Diagonale&,Diagonale&]

            if Faktor!<>0

                WhileLoop 0

                    Lastfall%=&loop
                    Lastenarray![Lastfall%,Zeile&]=Lastenarray![Lastfall%,Zeile&]-Faktor!*Lastenarray![Lastfall%,Diagonale&]

                EndWhile

                WhileLoop 0,size!-1,1

                    Spalte&=&loop
                    A![Spalte&,Zeile&]=A![Spalte&,Zeile&]-Faktor!*A![Spalte&,Diagonale&]

                EndWhile

            EndIf

        EndWhile

    EndWhile

EndProc

'Rücksubstitution

Proc Solver

    Parameters Lastfall%, A![], Verschiebungsarray![], size!
    Declare aux!, Zeile&, Spalte&, Diagonale&

    WhileLoop size!,1,-1

        Diagonale&=&loop-1
        aux!=0

        WhileLoop Diagonale&+1,size!-1,1

            Spalte&=&loop
            aux!=aux!+A![Spalte&,Diagonale&]*Verschiebungsarray![Lastfall%,Spalte&]

        EndWhile

        Verschiebungsarray![Lastfall%,Diagonale&]=(Lastenarray![Lastfall%,Diagonale&]-aux!)/A![Diagonale&,Diagonale&]

    EndWhile

    Return Verschiebungsarray![]

EndProc

Dreiecksmatrix
Verschiebungsarray![]=Solver(Lastfall%, A![],Verschiebungsarray![], size!)

WhileLoop 0,size!-1

    Print Verschiebungsarray![0,&loop]

WaitInput

quoi fais je car, si je deux Arrays transfert et wieder zurückgeben muss (so comment chez qui Procédure "Dreiecksmatrix")? Mir fällt en supplément seulement un, dass je cela une Array à l'autre anfügen devrait...
 
09.08.2012  
 



plusieurs Werte (égal si Array etc) zurückgeben simple so comment qui APIs es aussi 1faire
indem simple un Handle/ grenier retour wird/ Struktur.
KompilierenMarqueSéparation
 {$cleq}
cls
long myTwoCentValues=gimmyTwoCentValues()
print long(myTwoCentValues,0),long(myTwoCentValues,4)
globalFree(myTwoCentValues)
waitInput
end

nProc gimmyTwoCentValues

    long cents=dim(8)// 8 byte Speicher für 2 Longs reservieren und Handle nach cents legen
    long cents&,0=10,20// die werte 10;20 hintereinander in den Speicher cents legen
    return cents

09.08.2012  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

6.521 Views

Untitledvor 0 min.
RudiB.09.09.2021
Michael Hettner27.08.2021
Walter01.05.2021
RAW14.09.2018
plus...

Themeninformationen

cet Thema hat 2 participant:

Andreas Koch (6x)
iF (5x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie