(発表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 が勝手に命令消しやがる。†
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 という非公式ツールを使えばいける。 後はバイナリを直接弄る位?