Applikation auf bestimmten CPU-Kern ausführen

Gibt es da irgendwelche Tricks?
Nun, es ist schwierig für uns, uns vorzustellen, was dein Programm ist/macht. Grundsätzlich gilt bei cout: Je mehr in eine Anweisung gepackt wird, desto schneller. Allerdings kann auch viel Geschwindigkeit durch Optimierungen gewonnen werden, aber dafür müssten wir dann wirklich Code sehen.

Andere Simulationen nutzen meist die WinAPI oder OpenGL, was durch die GPU sehr viel schneller ist.

Gruss
cwriter
 
Ich unterlasse ... "cout", da dies zu viel Zeit frisst.
Wenn du in jedem Schleifendurchgang (oder irgendwas in der Art) ein cout machst; ja das wird langsam.
Konsolenoutput/input ist generell nicht das Schnellste. Aber das muss ja auch nicht sein.

Nur jeden zehntausendsten Schleifendurchgang ein cout,
oder immer wieder abfragen wieviel Sekunden vergangen sind und nur alle 3sec ein cout,
das reicht für den Status doch auch.

Sonstiges: Du redest jetzt plötzlich von grafischen Simulatoren (?), und gleichzeitig hast du ein Konsolenprogramm.
Geht es jetzt ums reine ungrafische Berechnen von Irgendwas oder nicht?
 
Nun, es ist schwierig für uns, uns vorzustellen, was dein Programm ist/macht. Grundsätzlich gilt bei cout: Je mehr in eine Anweisung gepackt wird, desto schneller. Allerdings kann auch viel Geschwindigkeit durch Optimierungen gewonnen werden, aber dafür müssten wir dann wirklich Code sehen.

Andere Simulationen nutzen meist die WinAPI oder OpenGL, was durch die GPU sehr viel schneller ist.

Gruss
cwriter

Ja schon klar. Ich kann leider den direkten Code nicht Zeigen. Ich möchte auch nicht eine Berechnung zerlegen und auf verschiedenen Kernen laufen lassen. Das würde zwar grundsätzlich gehen, jedoch muss/will ich mehrmals die Gleichungen mit verschiedenen Startparametern durchrechnen lassen. Jeder Startparameter auf einen Kern. Da ich eh alle Ergebnisse benötige kann ich auch die Startparameter auf die Kerne verteilen statt die einzelnen Rechnungen. Dann braucht ein Rechenschritt auch nicht auf einen anderen warten...
 
// Off Topic
Irgendwie ja schon, oder?
N = p0 * p1 * ... * pn
Das will man ja lösen.

Grüsse
Cromon

Also es ist eher sowas:

Matrix * Vektor => Fehler berechnen von Ergebnis Vektor -> Matrix ändern
und von vorn


Wenn du in jedem Schleifendurchgang (oder irgendwas in der Art) ein cout machst; ja das wird langsam.
Konsolenoutput/input ist generell nicht das Schnellste. Aber das muss ja auch nicht sein.

Nur jeden zehntausendsten Schleifendurchgang ein cout,
oder immer wieder abfragen wieviel Sekunden vergangen sind und nur alle 3sec ein cout,
das reicht für den Status doch auch.

Sonstiges: Du redest jetzt plötzlich von grafischen Simulatoren (?), und gleichzeitig hast du ein Konsolenprogramm.
Geht es jetzt ums reine ungrafische Berechnen von Irgendwas oder nicht?

ich bin mir grad nicht sicher was du unter Grafischen Simulatoren verstehst. Also ich meine jetzt kein CAD Programm.
Derzeit schreibe ich mir die Benötigten Ergebnisse in eine Textdatei (nach jeden Schleifen Durchlauf) und Ziehe sie mir später einfach in eine Excel Tabelle/Matlab um mir einen Grafen zu plotten.
War mal am Überlegen ob ich mir mit OpenCV ein "live" Grafen mit Anzeige...
 
Ich habe grade die SetProcessAffinityMask Funktion Implementiert und es funktioniert.
vielen Dank...

Lohnt es sich eine grafische Visualisierung eine Grafen auf einen anderen Kern auszulagern?
 
Derzeit schreibe ich mir die Benötigten Ergebnisse in eine Textdatei (nach jeden Schleifen Durchlauf)
Hui. Wie oft wird die Schleife durchlaufen? I/O ist immer etwas vom Langsamsten. Kannst du vielleicht 1000+ Ergebnisse in einen Buffer schreiben und die dann am Stück, möglicherweise asynchron, speichern?
Lohnt es sich eine grafische Visualisierung eine Grafen auf einen anderen Kern auszulagern?
Kommt immer auf den Verwendungszweck an. Allerdings: Wenn es 2-3 Tage dauert, bezweifle ich den Sinn einer Echtzeitüberwachung. Bei der UI ist es immer so eine Sache: Wenn du die UI nicht asynchron machst, kommt jeweils das hübsche "Keine Rückmeldung"-Fensterchen, wenn das Fenster schon eine Weile nicht mehr neu gezeichnet worden ist. Ebenfalls ist OpenCV wohl ein bisschen Overkill für diesen Anwendungszweck, geht aber sicher auch.
Was du dir durchaus überlegen kannst (da es sich um Matrizen handelt), ist, das Programm von der GPU rechnen zu lassen. Gerade auch durch den schnelleren Speicher dürfte das schneller gehen, auch wenn ein praktisch komplett neuer Code erforderlich ist. Stichworte: CUDA, OpenCL.

Gruss
cwriter
 
Hallo,

für Vektor/Matrix- Operationen empfiehlt es sich auch über BLAS nachzudenken. Dafür gibts diverse Implementierungen, vielleicht wäre aber OpenBLAS etwas für dich. Das sollte zuminest den Schritt der Berechnungen theoretisch deutlich beschleunigen. Gibts auch für CUDA etc.

Für deine verschiedenen Kerne könnte man auch über OpenMP nachdenken. Die Anbindung ist da auch mittels C/C++ gegeben.

Beste Grüße
 
Zurück