CUDA SASS コードを表示していて、同じレジスターへの大量の移動操作に気付きました。元:
172 MOV R3, R3;
173 MOV R4, R4;
174 MOV R3, R3;
175 MOV R4, R4;
176 MOV R4, R4;
177 MOV R3, R3;
178 MOV R4, R4;
これらの移動操作の目的は何ですか? それはタイミングのためであり、彼らは「ノー」のように振る舞いますか、それともそれほど明白ではありませんか?
注: これらは PTX コードには含まれず、SASS のみに含まれます。I と assume は、PTX 操作中ではなく、操作の合間に使用されます。ただし、文脈上、PTX は次のとおりです。
85 .reg .u32 a, b;
86 bfind.s64 a, %rd37;
実際のc++
コードは、上記の ptx のインライン アセンブリです。
更新:
を使用してコンパイルされ、Cuda Toolkit 7.5 を使用sm_52
しcompute_52
てx64
Visual Studio 2013 でコンパイルされました。デバイス: GTX 970 (Maxwell GPU)。
Debug
からに切り替えると、Release
この非効率性が解消されます。