2016-04-18 17 views
0

Viele OpenACC-Tutorials gehen davon aus, dass der Compiler/Accelerator auf Korrektheit überprüft, indem Abhängigkeiten automatisch überprüft und sichergestellt wird, dass die Schleife tatsächlich parallelisierbar ist. Die OpenACC-Spezifikation scheint jedoch nichts über die obligatorische Korrektheitsanalyse zu erwähnen. Sind OpenACC-Compiler OBLIGIERT, um zu prüfen, ob Schleifen tatsächlich parallelisierbar sind und aufgeben, wenn sie nicht sind?Ist die Abhängigkeitsanalyse für OpenACC-Compiler obligatorisch?

Antwort

2

Der Compiler muss Schleifen analysieren, um festzustellen, ob sie datenunabhängig sind, wenn die "auto" -Klausel der "loop" -Direktive verwendet wird. (Siehe Abschnitt 2.9.6 des OpenACC-Standards).

Für Schleifen innerhalb eines "kernels" -Konstrukts ist "auto" standardmäßig aktiviert, es sei denn, die Klauseln "independent" oder "seq" werden verwendet.

Für "loop" -Direktiven innerhalb eines "parallelen" Konstrukts ist "auto" standardmäßig nicht aktiviert, daher werden die dekorierten Schleifen als unabhängig betrachtet.

+1

Es ist ein bisschen stärker als das. Innerhalb einer parallelen Region haben dekorierte Schleifen implizit die "unabhängige" Klausel und der Compiler muss keine Analyse durchführen. Für undekorierte Schleifen innerhalb einer parallelen Region ist es bis zum Compiler. Der Compiler muss keine undekorierten Schleifen in einer parallelen Region analysieren, tut dies aber häufig. – jefflarkin