2010-11-22 12 views
0

Ich möchte lieber nicht Code verwenden, da es gemeinsame Konzept ist:Kann dieses Konzept mit OpenMP optimiert werden?

Sagen wir das Szenario einer Funktion haben, die an sich für die Schleife mit OpenMP Optimierungen werden kann weder zu groß oder zu klein und auch nicht leicht optimiert .

Es ist jedoch eine Funktion, die während des gesamten Projektlaufs millionenfach in einigen hundert nicht verwandten Fällen im Code aufgerufen wird.

[inline an sich scheint nicht viel zu tun (auf optimierte gcc Ergebnisse standardmäßig) und in ein Makro zu machen, während entweder nicht parallel sind, wäre es ein Unternehmen sein, kompatibel zu sein.]

+0

Dies ist zu allgemein. Die Antwort hängt vollständig von Ihrer Funktion ab und davon, wie diese Funktion tatsächlich aufgerufen wird. –

Antwort

0

Wenn die Funktion wird aufgerufen, heißt es mehrmals, besonders in einer Schleife? Die Frage ist ein wenig vage - vielleicht ja (es heißt Tausende von Malen in jedem von ein paar hundert nicht verwandten Orten -> Millionen) oder vielleicht nein (es heißt einmal in jedem von hundert nicht verwandten Orten, und Sie treffen diese Abschnitte des Codes Tausende Male -> Millionen).

Im ersten Fall, dann ja, Parallelisierung der "Karte" - das heißt, die Funktion unabhängig von einer Reihe von Fällen anwenden - ist einfach und OpenMPs sehr gut.

Im zweiten Fall, wenn die Funktion eine Million Mal aufgerufen wird, aber jedes Mal einmal, dann nein. Es gibt Wiederholung der Ausführung dort, aber keine ausgesetzt Nebenläufigkeit; es gibt keine Liste von Aufgaben, die gleichzeitig erledigt werden müssen, die unabhängig voneinander erledigt werden können. Alles, was Sie dort tun können, wenn die Funktion wahrscheinlich mit wiederholten Parametern aufgerufen wird, ist die Verwendung von Memoization, bei der es sich um einen Speicher/Rechenzeit-Kompromiss handelt, nicht um eine Parallelisierungstechnik.

In dem zweiten Fall kann es der Fall sein, dass Sie den Code restrukturieren können, so dass ein Bündel dieser Funktionsaufrufe auf einmal gemacht werden, die Parallelität offen legen und Parallelisierung erlauben - aber es ist nicht etwas, das OpenMP (oder jedes parallele Programmiermodell) kann automatisch für Sie tun.

2

OpenMP ist für "Dinge parallel laufen lassen" - im Allgemeinen. Nicht nur for Loops ... Nun, Sie müssen nicht einmal irgendwelche Loops haben, um OpenMP gut zu nutzen und Ihren Code zu beschleunigen.

Das einzige, was zählt ist: "habe ich mehrere unabhängige Operationen, die eins nach dem anderen laufen, und die gleichzeitig funktionieren könnten?". Wenn ja, dann haben Sie einen einfachen Ort für die Optimierung mit OpenMP gefunden.

Verwandte Themen