Es hängt davon ab, wie viele Kerne Sie haben. Wenn Sie nur 2 Kerne haben (CPU, Prozessoren, Hyperthreads, Sie wissen, was ich meine), dann kann OpenMP nicht so eine enorme Leistungssteigerung bieten, aber es wird Ihnen helfen.Die maximale Verstärkung, die Sie haben können, ist Ihre Zeit durch die Anzahl der Prozessoren zu teilen, so dass es immer noch 100 - 150 ms pro Frame dauert.
Die Gleichung ist
parallel Zeit = (([Gesamtzeit, um eine Aufgabe auszuführen] - [Code, parallelisiert werden kann])/[Anzahl der CPUs]) + [Code, der nicht parallelisiert werden kann]
Grundsätzlich rockt OpenMP bei parallelen Schleifen. Es ist sehr einfach zu bedienen
#pragma omp parallel for
for (i = 0; i < N; i++)
a[i] = 2 * i;
und bang, Ihr für ist parallelisiert. Es funktioniert nicht für jeden Fall, nicht jeder Algorithmus kann auf diese Weise parallelisiert werden, aber viele können neu geschrieben (gehackt) werden, um kompatibel zu sein. Das Schlüsselprinzip ist Single Instruction, Multiple Data (SIMD), wobei derselbe Faltungscode beispielsweise auf mehrere Pixel angewendet wird.
Aber die einfache Anwendung dieses Kochbuchs widerspricht den Regeln der Optimierung.
1-Benchmark Code
2-Die REAL Engpässe mit „wissenschaftlichen“ Beweis (Zahlen), anstatt einfach zu erraten, wo Sie denken, es einen Engpass
3-Wenn es wirklich Schleifen Verarbeitung ist, dann OpenMP für Sie
Vielleicht einfache Optimierungen auf Ihrem vorhandenen Code können bessere Ergebnisse geben, wer weiß?
Eine andere Straße wäre OpenGL in einem Thread und Datenverarbeitung auf einem anderen Thread zu laufen. Dies wird sehr hilfreich sein, wenn opengl oder Ihr Partikel-Rendering-System viel Energie verbraucht, aber denken Sie daran, dass Threading zu anderen Arten von Synchronisationsengpässen führen kann.
Sie könnten auch einfach Pthreads oder was auch immer das OS bereits bietet. – pestilence669
@Pestilence - ja, obwohl ich dabei bin, plattformübergreifende Lösungen vorzuschlagen :) –
lol. Pthreads auf Cygwin dann! :) – pestilence669