CUDAドキュメンテーション、セクション1.2.3 Incorrect optimizationは、こう述べています。副作用のないPTXにasm volatileを使用する理由はありますか?インラインPTXの
コンパイラは
asm()
文は出力オペランドを変更する以外は副作用がないことを前提としています。asm
はPTXの生成時に削除または移動されていないことを確認するために、あなたはvolatile
キーワード、例えば使用する必要があります。私のインラインPTXが実際にレジスタの外に何の副作用を持っていないない場合asm volatile ("mov.u32 %0, %%clock;" : "=r"(x));
を、私がすべき揮発性を使用することは決してありませんか、それとも私はまだそれを持っていたいかもしれない場合がありますか?ルールを仮定