AMD APP SDKのOpenCLをCPUで動かしたらOpenMPより倍速い?
をちょっと修正して
CPUで動かすようにしたので、手元にあった環境で動かしてみました。
$cd opencl_etc/cpu $make $./cpu = OpenCL on CPU = Normal: 7785[ms] OpenMP: 8threads Normal: 2124[ms] OpenCL: 1413[ms] == Platform : 0x7fde975d4670 == Name : AMD Accelerated Parallel Processing Vendor : Advanced Micro Devices, Inc. Version : OpenCL 2.0 AMD-APP (1598.5) == Device : 0x1642b10 == Name : Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz Vendor : GenuineIntel (ID:4098) Version : OpenCL 1.2 AMD-APP (1598.5) Driver version : 1598.5 (sse2,avx) OpenCL C version : OpenCL C 1.2
OpenMPより倍速いだって・・・!?
なんか信じられないのでもうちょっと調べてみるけどあり得るのか・・・。
6/7追記
「gccのOpenMPが裏でpthreadを使っていて、OpenCLはTBBを使っていて、つまりpthreadよりTBBが速いのでは?」と言われたので、純AMD環境でVisualStudioでやってみました。
= OpenCL on CPU = Normal: 13274[ms] OpenMP: 8threads Normal: 2372[ms] OpenCL: 859[ms] == Platform : 000007FED1817B60 == Name : AMD Accelerated Parallel Processing Vendor : Advanced Micro Devices, Inc. Version : OpenCL 2.0 AMD-APP (1642.5) == Device : 0000000002EB1220 == Name : AMD FX(tm)-8350 Eight-Core Processor Vendor : AuthenticAMD (ID:4098) Version : OpenCL 1.2 AMD-APP (1642.5) Driver version : 1642.5 (sse2,avx,fma4) OpenCL C version : OpenCL C 1.2
1スレッド版が激遅なのはなんなのかって感じですがOpenCL版は更に速かったです。
うーん・・・なんなんでしょう。