2

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_52compute_52x64Visual Studio 2013 でコンパイルされました。デバイス: GTX 970 (Maxwell GPU)。

Debugからに切り替えると、Releaseこの非効率性が解消されます。

4

0 に答える 0