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

1

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.