V.S. NVの統合GPU

あと説明見てるとメモリコントローラがFusion向けに最適化されてるとか書いてあるので、初代IONとかの統合NVと、メモリレイテンシ/スループット比較してあると良いですね。
まあ、統合NVGPUが無いからやらない…いや、あった。手元にMacBookAirがあるのだった。なんであるのかよくわからないが…

とりあえず上のプログラムを動かした。結論としては、こっちのほうがよっぽどFusion。

上のコードの

//            if (! use_host_ptr)
                clEnqueueWriteBuffer(q, src_mem_obj, CL_TRUE, 0, buf_size, src_host, 0, NULL, NULL);

の部分で、本当にUSE_HOST_PTRしてれば転送いらないはずが、E350ではいる。MBAでは要らない。

map/unmapでメモリ転送してない。


まあ、結論としては、

  • 今のFusionは"Fusion"という意味ではWindows+OpenCL環境下ではNV統合GPU以下
  • Windows+cal環境では希望があるかもしれない
  • GPGPUという観点ではFusionは今のところどうでもいい存在

といった印象。

↓結果

==== alloc host ptr ====
memcpy 4MB: 0.013251[sec] 0.294793[GB/s]
memcpy 4MB: 0.002250[sec] 1.736145[GB/s]
memcpy 4MB: 0.001866[sec] 2.093267[GB/s]
memcpy 4MB: 0.001849[sec] 2.112701[GB/s]
map-unmap 4MB: 0.000278[sec] 14.051458[GB/s]
map-unmap 4MB: 0.000193[sec] 20.252163[GB/s]
map-unmap 4MB: 0.000191[sec] 20.454432[GB/s]
map-unmap 4MB: 0.000190[sec] 20.557089[GB/s]
map-unmap + memcpy 4MB: 0.012607[sec] 0.309851[GB/s]
map-unmap + memcpy 4MB: 0.002400[sec] 1.627657[GB/s]
map-unmap + memcpy 4MB: 0.002168[sec] 1.801826[GB/s]
map-unmap + memcpy 4MB: 0.002081[sec] 1.876962[GB/s]
empty latency 0.003041[sec]
empty latency 0.000212[sec]
empty latency 0.000194[sec]
empty latency 0.000188[sec]
read latency(1byte): 0.001007[sec]
read latency(1byte): 0.000875[sec]
read latency(1byte): 0.000896[sec]
read latency(1byte): 0.000893[sec]
gpu memcpy 4MB: 0.019379[sec] 0.201572[GB/s]
gpu memcpy 4MB: 0.009917[sec] 0.393893[GB/s]
gpu memcpy 4MB: 0.009926[sec] 0.393534[GB/s]
gpu memcpy 4MB: 0.009938[sec] 0.393062[GB/s]
==== use host ptr ====
memcpy 4MB: 0.002142[sec] 1.823687[GB/s]
memcpy 4MB: 0.001855[sec] 2.105913[GB/s]
memcpy 4MB: 0.001842[sec] 2.120632[GB/s]
memcpy 4MB: 0.001856[sec] 2.104830[GB/s]
map-unmap 4MB: 0.000791[sec] 4.939403[GB/s]
map-unmap 4MB: 0.000166[sec] 23.506456[GB/s]
map-unmap 4MB: 0.000175[sec] 22.321526[GB/s]
map-unmap 4MB: 0.000171[sec] 22.850767[GB/s]
map-unmap + memcpy 4MB: 0.002081[sec] 1.876962[GB/s]
map-unmap + memcpy 4MB: 0.002051[sec] 1.904452[GB/s]
map-unmap + memcpy 4MB: 0.002066[sec] 1.890607[GB/s]
map-unmap + memcpy 4MB: 0.002134[sec] 1.830410[GB/s]
empty latency 0.000208[sec]
empty latency 0.000159[sec]
empty latency 0.000157[sec]
empty latency 0.000157[sec]
read latency(1byte): 0.000838[sec]
read latency(1byte): 0.000825[sec]
read latency(1byte): 0.000822[sec]
read latency(1byte): 0.000820[sec]
gpu memcpy 4MB: 0.033693[sec] 0.115936[GB/s]
gpu memcpy 4MB: 0.033744[sec] 0.115761[GB/s]
gpu memcpy 4MB: 0.045331[sec] 0.086172[GB/s]
gpu memcpy 4MB: 0.031970[sec] 0.122185[GB/s]

あとgpu memcpyなんでこんな遅いんだろ…いや、もういい…もう忘れよう。Fusionなんて無かった。