2013-08-21 48 views
0

爲什麼blockDim是一個塊中的線程總數,對於CUDA程序中的網格中的所有塊都是一樣的?我知道,如果所有塊的塊大小相同,索引將非常容易,但是如果我的塊的大小倍數爲32(對於warps),但順序遞增,則可能AP或GP索引非常容易。爲什麼Blockdim對於CUDA中的網格中的所有塊都應該是相同的?

使網格的所有塊都具有相同大小的原因是什麼?

+0

什麼AP和GP索引? – talonmies

+1

它是CUDA的一個限制。這裏有沒有合適的SO編碼問題? –

回答

1

如果您有多個不同大小的塊都運行相同的內核,很可能較大的塊在SM上花費的時間比較小的塊要長。與均勻分佈的工作負載相比,這會顯着減慢代碼。在某種程度上,他們阻止你在腳下射擊自己。我也會冒險猜測它會極大地簡化它們的內存管理 - 在統一塊大小的情況下,每塊需要在SM上分配一定數量的共享內存/寄存器等。

可變塊大小似乎是可能的,但沒有根據。如果你擔心在一個街區做無用的工作,不要這樣做。如果您不在網格中,請儘早退出該塊 - 性能下降很小。

相關問題