2017-08-09 1 views
0

Ich bin neu bei OpenCL und arbeite an der Verschlüsselung von Blockchiffren mit OpenCL auf FPGA. Ich lese etwas Papier und weiß, dass es in Opencl zwei Arten von Kernen gibt (einzelnes Arbeitselement und NDRange). Die Funktionen des NDRange-Kernels werden vom Compiler nicht automatisch weitergeleitet, während die Funktionen des einzelnen Work-Item-Kernels funktionieren.OpenCL single work-item VS NDRange Kernel auf FPGA

Wird empfohlen, einen einzelnen Work-Item-Kernel anstelle von NDRange Kernel auf FPGA zu implementieren? Warum?

Wenn ich den Kernel in einer Schleife laufen lassen wollen, bis alle Daten gelesen werden, dann der Kernel (holen Sie einige Daten vom Host auf einmal - laufen Sie auf FPGA - schreiben Sie zurück). Wie kann die Pipeline erreicht werden?

+1

Ich empfehle, die Anleitung von Ihrem FPGA-Anbieter zu überprüfen. Sie kennen ihren Compiler am besten. Ich habe auch einige gute Videos auf ihren Websites gesehen. So würden Sie nicht nur die Antwort auf diese Frage lernen, Sie würden wahrscheinlich viel mehr in diesem Prozess lernen. – Dithermaster

Antwort

1

Mit dem Kernel für einzelne Arbeitselemente können Sie die Berechnungsschleifen in Ihren Kernel verschieben. Sie können benutzerdefinierte Pipelines erstellen, clevere Optimierungen bei Akkumulationen vornehmen und Zugriffsmuster über "Pragmas" steuern. Ein NDRange-Kernel verlässt sich auf Sie, um die Daten unter den Arbeitselementen zu partitionieren, und der Compiler generiert Hardware vom Typ SIMD, wobei jede Einheit von Ihrem Kernel beschrieben wird. Es ist gut, wenn Ihr Problem eine regelmäßige Datenparallelität aufweist, die die Partitionierung vereinfacht. Die NDRange-Kernel von OpenCL sind für SIMD-Recheneinheiten wie GPU ausgelegt. Sie können auch "Kanäle" verwenden, um Daten zwischen einzelnen Work-Item-Kernels in Streaming-Anwendungen zu verschieben, wodurch die DRAM-Bandbreite verringert wird. Für NDRange-Kernel müssten Sie den globalen Speicher als Medium für die gemeinsame Nutzung von Daten zwischen Kernen verwenden.