(発表5回) SASS について
SASS とは何か?
PTX nvccが出すアセンブリ。
その更に後ろにあるほぼ、ネイティブアセンブリ。
Full CUDA compilation st....
この decuda を活用して書かれた "Micro-benchmarking the GT200" は全CUDAプログラマが読むべきものであると思う。
nvcc
-arch
cubin は 1つの機械語しか入れられないが
fatbin を使うと1つのファイルに複数の機械語 + ptxを入れられる。
CUDA ランタイムは動きそうなマシンの機械語+PTXを入れて、駄目な場合でもPTXから変換して動作する。-arch=compute_XXX
-arch sm_10 で特に問題ない。実行時にうまくやってくれる。
---------
cuobjdump のマニュアル。
------
活用事例。(こんなん役に立つの?と思われる方に)
* 命令毎のスループットを取りたい。ptxas が勝手に命令消しやがる。 [#c3e6ab9f]
sass で見ると消えてるのが見える。cuobjdump 必須。
add_u64 'GT200 には64bit加算がある)
NVGPU は対応してないので32bit 加算にかえてしまう。
(そもそも GT200 は32bitアドレスなので上位は無駄な事が多い。ポインタでは)
sm_20 (Fermi)以降は、64bit なので、この辺の苦労はなくなる。
------
Tesla2050(Fermi世代)。
reduction の時にメモリバリアをちゃんと書いてないとき。
_threadfence_block()
コンパイラの最適化を抑制する以上の効果が?
命令見ると MEMBER なんてある。SM20 ではメモリバリアが必要なのでは?
---
レジスタ数。
ptxas の maxreg で調整出来るけど、むしろ遅くなる事がある。
仮想レジスタなので実際にどうか分からない。
SASS は物理レジスタで見れるので溢れたかどうか分かる。
-----
まとめ。
PTXより情報量あるので。SAAS 読むべき。
---
inline asm で弄っても PTX なので駄目。
ASFermi という非公式ツールを使えばいける。
後はバイナリを直接弄る位?