我正在分析我的CUDA應用程序,並且我遇到了一些我不瞭解Visual Profiler中存在的「控制流分歧」度量標準的內容。CUDA - Visual Profiler和控制流分流
根據用戶指南:
控制流動發散給出了那些沒有被所有的線程在warp執行,因此造成發散線程指令的百分比。
我有下面的代碼在我的CUDA內核:
int var;
var = tex2D(texture, x, y); // texture fetch
if(var < 0) {
var *= -1;
results[(blockIdx.x*blockDim.x) + threadIdx.x] = var; // global memory array
}
這裏發生了什麼:沒有哪一個線程進入分支(我檢查全局內存中值),但探查控制流量分歧是34%。 如果在同一分支上插入一個printf,那麼值跳轉到43%(奇怪的是執行時間也增加了),儘管stdout上沒有任何事情發生。 這是否意味着該度量考慮到了所有內核的指令,即使是沒有被任何線程執行的指令? (所以實際上沒有扭曲分支)
在這兩種情況下,發散分支度量都是0%。
我正在使用4.0。我會嘗試更新到5.0。 –