Artikel-ID: 000086372 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 04.08.2017

Warum funktioniert #pragma ivdep in aocl Version 17.0 nicht korrekt?

Umgebung

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

    In 16.1 verhielt sich dieser Code wie erwartet, wo die äußere Schleife aufgrund von Abhängigkeiten serialisiert wurde und die innerlichen Schleife-Abhängigkeiten vom #pragma ivdep entfernt wurden.

    Diese Schleife wird aufgrund wahrer Abhängigkeiten mit innerer Schleife serialisiert

    für (nicht vorzeichenloses Zeichen x = 0; x < 4; x) {

    Innere Schleife hat keine Inter-Iterations-Abhängigkeiten, hängt aber von der äußeren Schleife ab

    #pragma-Signalton

    für (nichtsigniertes Zeichen y = 0; y<64; y) {

    In 17.0 wird der #pragma ivdep jetzt sowohl auf die innere als auch auf die äußere Schleife angewendet, sodass die Abhängigkeiten in der äußeren Schleife nicht vom Compiler berücksichtigt werden.  In der Folge funktioniert ähnlicher Code in der Hardware möglicherweise nicht korrekt, obwohl er in der Emulation funktioniert.

    Lösung

    Problemumgehung:

    1. Fügen Sie dem Kernel ein zusätzliches Argument "Dummy" hinzu.  Auf Der Host-Seite übergeben Sie für dieses Dummy-Argument immer 1.

    BEVOR

    __kernel ungültiger my_kernel(
    __global cpx_t* die Eingabe beschränken,
    __global cpx_t* Das Ergebnis beschränken)

    NACH

    __kernel ungültiger my_kernel(
    __global cpx_t* die Eingabe beschränken,
    __global cpx_t* das Ergebnis beschränken,
        int Dummy)

    2. Wickeln Sie die innere Schleife in das "If (Dummy)" ein:

    Diese Schleife wird aufgrund wahrer Abhängigkeiten serialisiert

    für (nicht vorzeichenloses Zeichen x = 0; x < 4; x) {

    wenn (Dummy) {

    Keine Abhängigkeiten innerhalb jedes Satzes von 64 Iterationen

    #pragma-Signalton

    für (nichtsigniertes Zeichen y = 0; y<64; y) {

     

    Dieses Problem wird voraussichtlich in einer zukünftigen Version der Intel© OpenCL™ für FPGA SDK behoben.

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 5 Produkte

    Intel® Arria® 10 FPGAs und SoC FPGAs
    Intel® Stratix® 10 FPGAs und SoC FPGAs
    Cyclone® V FPGAs und SoC FPGAs
    Arria® V FPGAs und SoC FPGAs
    Stratix® V FPGAs

    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.