aufgerufen wird Ich versuche, einen Kernel auf der GPU auszuführen und zusätzliche Berechnungen auf dem Host (CPU) durchzuführen. Ich sehe diesen Effekt:OpenCL-Kernel-Ausführung wird nicht gestartet, bis clFinish oder clWaitForEvents
nur der Kernel benötigt etwa 2000 ms:
clEnqueueNDRangeKernel ...
clFinish (oder clWaitForEvents habe ich versucht, beide)
I simuliert zusätzliche Rechen auf der CPU mit Schlaf (10):
clEnqueueNDRangeKernel ...
Schlaf (10);
clFinish (oder clWaitForEvents)
In der Theorie der Kernel auf GPU und nach dem 10 Sekunden Schlaf der Kernel fertig sein soll ausgeführt werden soll. Aber Zeitmessung sagte, dass alles 12000ms anstelle von 10000 benötigt.
Ruft clFinish oder clWaitForEvents den Kernel zum Starten auf oder habe ich etwas übersehen?
Ich benutze eine AMD Fusion CPU/GPU und Linux.
Vielen Dank.
Wie groß sind Ihre Daten? Ist es möglich, dass 2000 ms die Zeit darstellen, die benötigt wird, um Ihre Daten von der GPU auf die CPU zu übertragen? – user1202136
Die Daten liegen unter 1 MB. Aber es sollte nicht in meiner Messung sein. Ich kopiere Daten auf das Gerät, beginne zu messen, führe den Kernel aus + sleep + clFinish, höre auf zu messen, kopiere Daten zurück zum Host – Tomas
Wie genau misst du? Kopieren Sie Ihre Daten synchron auf das Gerät? – reima