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

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Tue, 10 Jun 2014 01:13:23 JST (3609d)