maliちゃん...
TRANSCRIPT
![Page 1: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/1.jpg)
Maliちゃん@tanakmura
![Page 2: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/2.jpg)
今日の内容
● Abstract● AndroidでOpenCL● Mali-T604ベンチマーク
● 結論
![Page 3: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/3.jpg)
自己紹介
● @tanakmura● Id: w_o● 某F社でプログラム速くしたりコードを読みにくくした
りバグを入れたりしてる
![Page 4: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/4.jpg)
高速化の仕事の紹介
● 高速化の仕事って一体何やってるの?
![Page 5: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/5.jpg)
仕事内容1: add命令の計測
● add命令のレイテンシを計測する
● 特に浮動小数addのレイテンシは
– CPUごとに違う
– アプリケーションによっては影響大きい
– →すごく重要な仕事
● add命令をひたすら並べて時間を計る
![Page 6: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/6.jpg)
仕事内容2: add命令の計測
● add命令のスループットを計測する
● 命令のスループットはアプリケーションの性能に大きな影響を与える– →すごく重要な仕事
● add命令をレジスタがかぶらないようにひたすら並べて時間を計る
![Page 7: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/7.jpg)
仕事内容3: add命令の計測
● VLIWにいくつadd命令を埋められるか調べる
● コンパイラでどうやってそれを書くか調べる
● アプリケーションの性能に(ry– すごく重要なしg(ry
–
● add命令をスロットがかぶらないようにひたすら並べて時間をはかる
![Page 8: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/8.jpg)
その他の仕事内容
● load命令の(ry● mul(ry● 起動レイテンシ● メモリ転送レイテンシ
![Page 9: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/9.jpg)
というのは7割くらい冗談ですが
![Page 10: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/10.jpg)
clminibench
● OpenCLでもそれらを計りたい場合用ベンチ
● まあこんな感じで動く
![Page 11: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/11.jpg)
こっから本題
![Page 12: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/12.jpg)
ARM Mali
● ARM社が出してるGPU● https://twitter.com/arm_link/status/245703054
912000003● 公式がMaliちゃんと呼んでたのでMaliちゃんと呼ぶ
べき
●
![Page 13: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/13.jpg)
ARM Mali T604
● OpenCLが動くらしい
– しかし公式SDKはヘッダが入ってるだけで使えない…
●
● しかしNexus 10のlibGLES_mali.soのシンボルを見ると、clCreateContextなどの文字が
– http://forum.beyond3d.com/showthread.php?t=63071
● →libGLES_mali.so をリンクすればOpenCLが利用可能
![Page 14: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/14.jpg)
clminibench for Android
● Android端末のGPUのadd命令のレイテンシを測定可能な画期的なベンチマークソフト
● ポータブルなAPIであるOpenCLを使うことで、世界中のNexus 10でコンピュータの性能を測定可能
![Page 15: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/15.jpg)
以下結果をお楽しみください
![Page 16: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/16.jpg)
ClGetDeviceInfo
● Compute unitの数 = 4● PREFERRED_VECTOR_WIDTH_FLOAT = 4
– float4つかったほうがいい
– 公式ドキュメントにもそう書かれている
● OpenCL 1.1● キャッシュあり(read/write)● local_mem_type = GLOBAL
– local memoryは意味ない
● GPUだけ。CPUで動くOpenCLは付いてない
![Page 17: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/17.jpg)
Fma throughput
● float : 8.8GFLOPS● Float4 : 19.0 GFLOPS●
● Compute Unit = 4, float4, FMA, 533MHz● 4*4*2*0.533 = 17
– are…?
●
![Page 18: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/18.jpg)
FMA throughput
● CPUはCoretex A15 1.7GHzx2● = 4*2*1.7*2● = 27.2GFLOPS● あっ…
●
● GPUの可能性とは一体…
![Page 19: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/19.jpg)
Fma1 dep throughput
● ワークアイテムたくさん● 各ワークアイテムでは全依存
● 4.8GFLOPS●
● あとで書いてるけどレイテンシが30と長いのでワークアイテム並べるだけでは埋めきれないのでは
● 手で命令スケジューリングが必要
![Page 20: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/20.jpg)
Enqueue kernel latency
● 780usec● てもとのこのAPUだと130usec
![Page 21: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/21.jpg)
Enqueue memory XX
● API呼び出しの時間
● 公式ドキュメントにはCL_ALLOC_HOST_PTRが使えるからあんまこのへんのは使うなと書いてある
– Host unified mmory = 0だが…?
● Latency : 100usec● Throughput : read=3.2GB/s write=5.8GB/s
– writeのほうが速い理由は知らない
![Page 22: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/22.jpg)
Global read bandwidth
● CL カーネルでメモリアクセス
●
● float でread 0.77GB/s● float4 でread 2.81GB/s●
● float4 でアクセスしろとドキュメントに書いてる
● EnqueuMemoryXXのほうが速いが…
![Page 23: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/23.jpg)
float add latency
● addを依存全部つなげて時間計測
●
● float1 : 30clk● float4 : 56clk●
● float4とfloatで別の命令があるのか?
● ちなみにfloat2は56clk– Ivy : 3
– ApuのGPU: 4
– HD7750: 5
![Page 24: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/24.jpg)
memory load latency
● off = mem[off] // mem は0初期化
●
● Gmem: 132clk● Lmem: 350clk●
● lmemのほうが遅い…?
![Page 25: Maliちゃん @tanakmuranano.flop.jp/txt/mali-chang.pdf公式がMaliちゃんと呼んでたのでMali ちゃんと呼ぶ べき ARM Mali T604 OpenCLが動くらしい – しかし公式SDKはヘッダが入ってるだけで使えない…](https://reader035.vdocuments.pub/reader035/viewer/2022063008/5fbccc7e7281727ba27bc85d/html5/thumbnails/25.jpg)
まとめ
● Nexus 10 はOpenCL使える
● メモリ転送はなんか遅い
● FLOPS値はCortexA15x2より遅いとか気にしてはいけない