Nur, dass sie bei der Optimierung z. B. Zero-Copy-Pointer einsetzen und das ist ja ein OpenCL Konstrukt, welches nur verhindert, dass, wenn man auf der CPU bleibt, Objekte nicht kopiert werden. Wenn man auf einen externen Beschleuniger geht wird dann kopiert. Das reduziert schonmal deutlich den Overhead und steigert die Performance, siehe Folie 12. Da ist nix mit doppelt Code.
Bei anderen Beispielen hast du aber recht, man muss ggf. anpassen. Für diejenigen, die "mal schnell" etwas parallelisieren und das nicht nur für CPU tun wollen, sondern auch für GPU, ist OpenCL schon ein recht guter Ansatz. Man könnte aber z. B. auch so etwas wie OpenACC benutzen, dann hätte man eher den OpenMP-Style mit #pragma's. Allerdings ist das noch nicht so verbreitet und es gibt - meines Wissens nach - keine freien Compiler.
Richtig es gibt Möglichkeiten, die für GPU und CPU gleichermaßen sinnvoll sind. Und für ein Prototyping ist die Fähigkeit Code auf der CPU laufen zu lassen auch sehr gut. Und erst recht, wenn man debuggen möchte.
Ich finde Bolt sieht auch sehr interessant aus: http://developer.amd.com/community/blog/monte-carlo-sample-in-bolt/
Und Microsofts AMP kommt OpenMP teilweise auch recht nahe - aber MS-typisch natürlich an Windows + Visual Studio gebunden: http://msdn.microsoft.com/en-us/library/vstudio/hh265136.aspx
Sieht interessant aus aber ist auf CUDA beschränkt und ich hab nur AMD H/W hier. Anonsten komme ich derzeit auch mit OpenCL für GPUs bzw. OpenMP für CPUs recht gut zurecht.
Nur, dass sie bei der Optimierung z. B. Zero-Copy-Pointer einsetzen und das ist ja ein OpenCL Konstrukt, welches nur verhindert, dass, wenn man auf der CPU bleibt, Objekte nicht kopiert werden. Wenn man auf einen externen Beschleuniger geht wird dann kopiert. Das reduziert schonmal deutlich den Overhead und steigert die Performance, siehe Folie 12. Da ist nix mit doppelt Code.
Bei anderen Beispielen hast du aber recht, man muss ggf. anpassen. Für diejenigen, die "mal schnell" etwas parallelisieren und das nicht nur für CPU tun wollen, sondern auch für GPU, ist OpenCL schon ein recht guter Ansatz. Man könnte aber z. B. auch so etwas wie OpenACC benutzen, dann hätte man eher den OpenMP-Style mit #pragma's. Allerdings ist das noch nicht so verbreitet und es gibt - meines Wissens nach - keine freien Compiler.
Richtig es gibt Möglichkeiten, die für GPU und CPU gleichermaßen sinnvoll sind. Und für ein Prototyping ist die Fähigkeit Code auf der CPU laufen zu lassen auch sehr gut. Und erst recht, wenn man debuggen möchte.
Ich finde Bolt sieht auch sehr interessant aus: http://developer.amd.com/community/blog/monte-carlo-sample-in-bolt/
Und Microsofts AMP kommt OpenMP teilweise auch recht nahe - aber MS-typisch natürlich an Windows + Visual Studio gebunden:
http://msdn.microsoft.com/en-us/library/vstudio/hh265136.aspx
Vielleicht ist ja auch OpenMPC was interessantes für dich, bin mir aber unsicher, inwieweit das mit OpenMP kompatibel ist.
Ansonsten gibt es ja auch noch automatisiert parallelisierende Compiler, wie z. B. AESOP, wobei das schon eher Richtung Forschung geht.
Sieht interessant aus aber ist auf CUDA beschränkt und ich hab nur AMD H/W hier.
Anonsten komme ich derzeit auch mit OpenCL für GPUs bzw. OpenMP für CPUs recht gut zurecht.