2015-11-07 38 views
-2

我對分支數量有點困惑。控制流程(分支數)

如何計算下列內核中分支的數量?

我的設備計算能力是1.2,內核配置是<<<1,32>>>
數據大小是32(我的意思是一個warp。)。
分支數量在這裏如果我沒有弄錯..但爲什麼呢?

__global__ void Kernel(float *c) 
{ 
    int tid = blockIdx.x * blockDim.x + threadIdx.x; 
    float ia, ib; 
    ia = ib = 0.0f; 

    if (tid % 2 == 0) 
    { 
     ia = 100.0f; 
    } 
    else 
    { 
     ib = 200.0f; 
    } 

    c[tid] = ia + ib; 
} 
+0

這將幫助我們清除你錯誤的地方,如果你要提供你如何到達數字6. –

+0

嗯,那裏有6個括號。也許就是這樣? – Jez

+0

@RogerDahl我不認爲我出錯了!你有沒有檢查過它的結果? – samil

回答

0

除非有一些東西我在這裏完全不知道(我遺憾的是必須承認是完全有可能的),我只看到2個代碼分支在這裏:在if分支和else之一。一半的warp線程將執行if分支的代碼,第二個將執行else分支。

確實,由於指令是以鎖定步驟解碼的,所以這兩個分支內的代碼將不會在單個warp內並行執行。因此,執行這兩個分支的時鐘週期數將是每個分支的指令數量的總和,而不是這兩個分支中的最大值。但這是這裏唯一的「竅門」。