| |
|
|
![Andreas Koch: 07.08.2012](.././../../i/a/3162.gif) 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 |
|
|
| |
|
|
|
![iF: 07.08.2012](.././../../i/a/1.gif) | 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? |
|
|
| |
|
|
|
![Andreas Koch: 07.08.2012](.././../../i/a/3162.gif) 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? |
|
|
| |
|
|
|
![iF: 07.08.2012](.././../../i/a/1.gif) | 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. |
|
|
| |
|
|
|
![Andreas Koch: 07.08.2012](.././../../i/a/3162.gif) Andreas Koch | 2000 la fois plus rapide ist Musik dans meinen Ohren.![](.././../../i/s/qq5.gif) un vernünftiges Beispiel peux je allerdings seulement demain erstellen, là Je l' Programmcode pas trop Hause habe.
Wünsche wohl trop ruhen.![](.././../../i/s/__upl_ext_1212005047.gif) |
|
|
| |
|
|
|
![Andreas Koch: 08.08.2012](.././../../i/a/3162.gif) 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éparationcls
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? |
|
|
| |
|
|
|
![iF: 08.08.2012](.././../../i/a/1.gif) | 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: [...] ![](.././../../i/lnk.gif)
le sable sur Kugel: [...] ![](.././../../i/lnk.gif)
ici ne Include Pixels.inc: [...] ![](.././../../i/lnk.gif)
ici Ameisenpixel aus eigenem Fil: [...] ![](.././../../i/lnk.gif)
et entier important qui hPic.inc: [...] ![](.././../../i/lnk.gif)
ou bien autre Beispiele pour nProc-Verwendung:
asyncMsgBox.inc - Rückmeldungen asynchroner MessageBoxen: [...] ![](.././../../i/lnk.gif)
Canvas.inc: [...] ![](.././../../i/lnk.gif)
CanvasListBoxen: [...] ![](.././../../i/lnk.gif)
Keyboardhook pour Utilisateur Messages: [...] ![](.././../../i/lnk.gif)
miclevel-inc-mikrophon-eingangslautstaerke: [...] ![](.././../../i/lnk.gif)
OGL-2DUI: [...] ![](.././../../i/lnk.gif)
RGB-Funktionen: [...] ![](.././../../i/lnk.gif)
...
ce sont seulement un paire... gibt mtlw. so viel Schnulli... aussi chez den Comprend: [...] ![](.././../../i/lnk.gif)
cela ici ist super: [...] ![](.././../../i/lnk.gif) et devrait Dir la fois anschauen - avec quelque chose comme kamma aussi entier vite simple Jeux herzaubern comment z.B. den Hubi: [...] ![](.././../../i/lnk.gif)
![](https://xprofan.com/files/kkaai.jpg)
Votre Code peux je mir probablement seulement ce soir genauer regarder - maintenant muss je erstmal zum dentiste. ![](.././../../i/s/__upl_ext_1111498502.gif) |
|
|
| |
|
|
|
![Andreas Koch: 08.08.2012](.././../../i/a/3162.gif) 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. |
|
|
| |
|
|
|
![iF: 09.08.2012](.././../../i/a/1.gif) | 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? |
|
|
| |
|
|
|
![Andreas Koch: 09.08.2012](.././../../i/a/3162.gif) Andreas Koch | Ok, Problematik verstanden. ici ist qui neue Code, wobei maintenant alle Variablen transfert ou bien interne deklariert volonté. KompilierenMarqueSéparationcls
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... |
|
|
| |
|
|
|
![iF: 09.08.2012](.././../../i/a/1.gif) | 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 |
|
|
|