Top > 2012-06-02 > 5 (発表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 という非公式ツールを使えばいける。 後はバイナリを直接弄る位? |