Artikel-ID: 000073934 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 02.10.2019

Warum hängt das Intel® FPGA SDK für OpenCL-Compiler™ und wird nie mit NDRange-Kerneln beendet, die threadabhängige Steuerungs- oder Kanaloperationen enthalten?

Umgebung

  • Intel® Quartus® Prime Pro Edition
  • Intel® FPGA SDK for OpenCL™ Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Beschreibung

    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.

    Lösung

    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.

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Intel® programmierbare Geräte

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.