Ich habe in einem Beitrag gesehen, dass wir eine Funktion von einem OpenCL-Kernel aufrufen können. Aber in meiner Situation muss ich diese komplexe Funktion parallelisieren (von allen verfügbaren Threads), also muss ich diese Funktion auch zu einem Kernel machen und ihn sofort wie die Funktion vom Hauptkernel aufrufen? oder was ist mögliche Lösung für diese Situation? Vielen Dank im Voraus
Sie können Hilfsfunktionen von Ihrem Kernel aufrufen und sie werden auf die gleiche Weise wie der Kernel parallelisiert, stellen Sie sich diese als inline innerhalb Ihres Kernel-Codes vor. So wird jedes Arbeitselement die Hilfsfunktion für den Arbeitssatz aufrufen, den es behandelt.
%Vor%Wenn ich Ihre Frage richtig verstanden habe, möchten Sie einen separaten vollständigen Durchlauf über einen Puffer innerhalb des Kernels durchführen. Ich glaube nicht, dass dies vom Kernel aus möglich ist. Sie müssten also den Code für den "inneren" Pass als separaten Kernel erstellen und diesen Kernel auch separat von Ihrem Host-Code aufrufen. Die Ausgabe dieses Kernels muss nicht in den Hostspeicher zurückgelesen werden, sondern kann zwischen den Kernelaufrufen im Gerätespeicher verbleiben.
OpenCL 2.0 spec hat ein neues Feature für dynamischen Paralelismus hinzugefügt.
%Vor%Im folgenden Beispiel my_func_B enqueus my_func_A auf dem Gerät:
%Vor%Tags und Links opencl