Das Intel® FPGA SDK für OpenCL-Compiler™ bietet eine Garantie, dass Anweisungen in einem NDRange-Kernel von Threads in der Reihenfolge ihrer Thread-Identifier ausgeführt werden. Um sicherzustellen, dass die Garantie in Programmen erfüllt wird, die Thread-abhängigen Steuerungsablauf enthalten, wird vom Compiler am Join-Punkt der Thread-abhängigen Steuerungs-Flow-Pfade eine Neubestellungsbarriere eingefügt. Ein Fehler in der Konfiguration solcher Barrieren führt dazu, dass die Berechnung an der Barriere abwürgen kann, ohne dass fortschritte möglich sind.
Channel-Operationen können auch zu diesem Stillstand führen.
Unten sehen Sie ein Beispiel für ein "Thread-abhängiges Steuerungs-Fluss-Konstrukt":
Holen Sie sich die globale Thread-ID
int id = get_global_id(0);
Achten Sie darauf, dass wir nicht aus dem Rahmen gehen
wenn (ID < n)
c[id] = a[id] b[id];
Hier ist die if-Anweisung ein Steuerungsfluss-Konstrukt, das Thread-abhängig ist, d. h. was es tut, hängt davon ab, welcher Thread ihn ausführt.
Schreiben Sie den NDRange-Kernel neu, um keine Kanaloperationen oder Thread-abhängige Steuerungs-Fluss-Konstrukte zu enthalten.
Dieses Problem wird voraussichtlich in einer zukünftigen Version des Intel® FPGA SDK für OpenCL-Software behoben.