Der FPGA SDK für OpenCL™ Compiler bietet eine Garantie, dass Anweisungen in einem NDRange-Kernel von Threads in der Reihenfolge ihrer Thread-IDs ausgeführt werden. Um sicherzustellen, dass die Garantie in Programmen erfüllt wird, die einen threadabhängigen Ablauffluss enthalten, fügt der Compiler am Verknüpfungspunkt von threadabhängigen Ablaufsteuerungspfaden eine Barriere für die Neuordnung ein. Ein Fehler in der Konfiguration solcher Barrieren führt dazu, dass die Berechnung an der Barriere zum Stillstand kommt, ohne dass ein Vorwärtsfortschritt möglich ist.
Channel-Operationen können ebenfalls zu dieser Verzögerung führen.
Nachfolgend sehen Sie ein Beispiel für ein "threadabhängiges Ablaufkonstrukt":
Globale Thread-ID abrufen
int id = get_global_id(0);
Stellen Sie sicher, dass wir nicht aus dem Rahmen geraten
if (ID < n)
c[id] = a[id] b[id];
Hier ist die if-Anweisung ein Kontrollflusskonstrukt, das threadabhängig ist, dh was sie tut, hängt davon ab, welcher Thread sie ausführt.
Schreiben Sie den NDRange-Kernel so um, dass er keine Kanaloperationen oder threadabhängigen Ablaufkonstrukte enthält.