Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

ARM DS-5 StreamlineでMali GPUをモニター


Using DS-5 Streamline to Optimize Complex OpenCL™ Applications on Mali GPUsでは、ARM DS-5 Streamlineを使って、Mali GPUのパフォーマンス改善へのポイントを示しています。

ARM DS-5 Streamlineは、ARMの開発環境DS-5に含まれているツールで、ターゲットボード上で動くLinuxのCPUとGPUの各種カウンタ情報からプログラムがどの程度CPUやGPUを使っているかをタイムラインで表示してくれます。

5.20からはOpenCLのタイムラインをサポートし、NVIDIAのnvvpやAMDCodeXLのようなことができるようです。

ただし、これらはターゲットボード上のSoC/ASSP内でStreamlineがサポートしていないとダメです。
また、LinuxカーネルがStreamlineが使えるようにビルドされ、gadorデーモンを立ち上げる必要があります。
詳細は、ARM DS-5 Streamlineの使用(バージョン 5.20)を見てください。


この記事で注目すべき点は、最初の図のCached Local Memoryです。
Mali GPUには、OpenCLのlocal memoryが物理的に実装されていません。
local memoryはGlobal Memory、つまり、システムメモリ(DRAM)にマッピングされます。
local memoryを使うと、Global MemoryをGlobal Memoryにコピーするので、性能があがりません。
いや、悪くなるのです。

また、カーネル内で大量のレジスタを使うと、レジスタスピル(register spill)を発生します。
NVIDIAの最近のGPUは、レジスタスピルが発生すると、L1キャッシュに退避されますが、Mali GPUはこれまたGlobal Memory、つまり、システムメモリ(DRAM)にマッピングされます。

この記事でも、各カーネルは少ないレジスタで動作するように書くべしと。
できないときは、カーネルを分割せよと。

OpenCLで書けば、他のデバイスでも動くのですが、各デバイスの特徴(癖)があるので、そのデバイスで性能を上げるには、それなりのチューニングが必要です。

ARM Mali GPUの場合は、local memoryを使わなくして、SIMD記述し、少ないレジスタカーネルを実装するのが高速化の早道だということです。

これって、NVIDIAだと、逆なんですよね。困ったもんです。