Español
Foro

Quellcode beschleunigen

 

Andreas
Koch
¡Hola zusammen,

Yo debería después de Möglichkeit una Teil meines Programms en Einiges beschleunigen.

Dabei es se trata de un Procedimiento, el entweder una Reihe de Variables transferencia voluntad o direkt en el globalen Variables zugreifen muss. En el Variables es lo aktuell (todavía) en Arrays. Der gesamte Quellcode nimmt así a 40 Zeilen una. Laufen debería el Ganze en una 64-bit Sistema.

Welche Möglichkeiten hay como para mich?
Im Verdacht Yo el Themengebiete: Ensamblador, XPIA, XPSE, Profano2CPP y "natives" Programmieren.
Mit welchem Thema debería Yo mich como näher beschäftigen?

Mit freundlichen Grüßen

Andreas Koch
 
07.08.2012  
 



Grüße!

Nimmste simplemente nProcs: [...]  -

quasi natives Profano genau para Su Zweck entwickelt.

Gibt hier auch ya muy viele Características jeweils como Proc y nProc Nuevo -

simplemente nachfragen. Brauchst una konkretes Ejemplo?
 
07.08.2012  
 




Andreas
Koch
Hola si,

danke para el entschiedene Antwort. Das spart Tiempo. Ein konkretes Ejemplo wäre no schlecht, al Besten con Übergabe de Arrays.
Gibt lo una Anhaltspunkt, en wieviel el Ganze entonces más rápido se?
 
07.08.2012  
 



Je después de Operation haben wir ya gemessen el una nProc 2.000 veces más rápido

como una Proc ser kann. In nProcs kannst auch Ensamblador uso. Schreib simplemente

veces una kleines Beispielprogramm con uno Proc y luego mache Yo Usted lo una

nProc.
 
07.08.2012  
 




Andreas
Koch
2000 veces más rápido es Musik en media Ohren.
Ein vernünftiges Ejemplo kann Yo allerdings sólo morgen redactar, como Yo, el Programmcode no a Casa habe.

Wünsche wohl a ruhen.
 
07.08.2012  
 




Andreas
Koch
Hola si,
hier Yo ahora el Ejemplo.

Yo habe mi Procedimiento todavía una vez en zwei kleinere gesplittet, el algo übersichtlicher son. Das Plenario el Gaußsche Eliminationsverfahren para una Matrix beliebiger Größe y cualquier vielen Vektoren en el rechten Página abbilden. Vorraussetzung para el Lösbarkeit son el Singularität el Matrix y sämtliche Einträge en el Diagonalen<>0.

Como el beiden Prozeduren sólo zusammen Sinn ergeben, Yo ellos beide angehängt.

Wenn du nun el Procedimiento "Solver" en un nProc umwandeln könntest, wäre el una prima Sache. Yo sería mich entonces anschließend con el Procedimiento "Dreiecksmatrix" befassen.
KompilierenMarcaSeparación
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: Wenn irgendjemandem una Fehler en el Code auffällt, insbesondere una Rechenfehler, Por favor, Yo por lo tanto, mich darüber a informieren.

PPS: Kann uno con uno nProc auch el Dibujar en uno Mapa de bits beschleunigen?
 
08.08.2012  
 



Klar auch el Dibujar beschleunigen, kannst alles con hacer -
son sí quasi unendlich viele Anwendungsgebiete. Ist sólo natives
"Profan" con allen APIs.

Sinus: [...] 
Sand en Kugel: [...] 
Hier ne Incluir Pixels.inc: [...] 
Hier Ameisenpixel de eigenem Hilo: [...] 
Und bastante wichtig el hPic.inc: [...] 

Oder otro Beispiele para nProc-Verwendung:

asyncMsgBox.inc - Rückmeldungen asynchroner MessageBoxen: [...] 
Canvas.inc: [...] 
CanvasListBoxen: [...] 
Keyboardhook después de Mensajes del usuario: [...] 
miclevel-inc-mikrophon-eingangslautstaerke: [...] 
OGL-2DUI: [...] 
RGB-Características: [...] 

...

el son sólo unos pocos... son mtlw. así viel Schnulli... También incluye en el: [...] 

Das hier es klasse: [...] 
y solltest Dir veces anschauen - con algo como kamma auch bastante rápidamente einfache
Juegos herzaubern como z.B. el Hubi: [...] 



Su Code kann Yo vermutlich sólo heute abend genauer ansehen -
ahora muss Yo primero para Zahnarzt.
 
08.08.2012  
 




Andreas
Koch
Como scheint lo sí alles Mögliche a geben. Das voluntad Yo veces en Ruhe anschauen necesario. Auf cada Fall danke para el Ayuda.
 
08.08.2012  
 



So,

lass uns el Por favor, zusammen erarbeiten sodass entonces auch klar es,
como funktioniert y por qué.

nProcs son Hilo- y APC ( [...]  )- sicher y unheimlich
rápidamente, porque el Code como Maschinencode ausgeführt se.

Damit nProcs Hilo- y APC-sicher ser puede, podrá, a globale
Variables sólo lesend zugegriffen voluntad, sei porque, uno koordiniert
el Schreibzugriffe z.B. por Semaphore ( [...]  ) .

El sauberste y schnellste nProc kommt sin globale Variables de y
verarbeitet el como Parámetro übergebenen Werte a una Rückgabewert.
Lokale Variables (also en el nProc angelegte Variables) wiederum puede ser
así viele deklarieren cómo möchte.

Ejemplo:
KompilierenMarcaSeparación
Auch mögliche Syntax:
KompilierenMarcaSeparación
Weitere mögliche Syntax:
KompilierenMarcaSeparación
Su Proc solver verwendet sin embargo globale Variables y überschreibt
auch el Inhalte. Also wäre el erste Schritt, esta Procedimiento así umzuschreiben,
dass ihr el verwendeten Arrays como Parámetro transferencia y ser auch
el Rückgabewert dementsprechend una Array es sodass ellos para se alleine
sólo el verarbeitet qué ihr como Parámetro transferencia wurde sin el ellos se
qué de el Hauptprogramm saugen muss. Es auch unabhängig de nProc
en Procs el vorzuziehende oder "saubere" Programmiertechnik.

¿Puede Usted el fix ajustar?
 
09.08.2012  
 




Andreas
Koch
Ok, Problematik verstanden. Hier es el neue Code, wobei ahora todos Variables transferencia oder intern deklariert voluntad.
KompilierenMarcaSeparación
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

Was mache Yo porque, si yo zwei Arrays transferencia y otra vez zurückgeben muss (como en Procedimiento "Dreiecksmatrix")? Mir fällt dazu sólo una, dass Yo el una Array a el otro anfügen debería...
 
09.08.2012  
 



Mehrere Werte (egal si Array etc) zurückgeben simplemente como el APIs lo auch tun
indem simplemente una Handle/ Speicher zurückgegeben se/ Struktur.
KompilierenMarcaSeparación
 {$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  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

6.366 Views

Untitledvor 0 min.
RudiB.09.09.2021
Michael Hettner27.08.2021
Walter01.05.2021
RAW14.09.2018
Más...

Themeninformationen

Dieses Thema ha 2 subscriber:

Andreas Koch (6x)
iF (5x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie