「SIMT」體系結構的一些概念和設計對我而言仍然不清楚。OpenCL:關於SIMT執行模型的基本問題
從我所看到和閱讀的內容來看,分歧的代碼路徑和if()總是一個相當糟糕的主意,因爲許多線程可能會以鎖步方式執行。那究竟是什麼意思?什麼是這樣的:
kernel void foo(..., int flag)
{
if (flag)
DO_STUFF
else
DO_SOMETHING_ELSE
}
參數「標誌」是一切工作的單位和同一分支同樣是採取所有的工作單位。現在,GPU是否會執行所有的代碼,然後序列化所有的東西,並且基本上仍然採取未被採用的分支?或者它是否更聰明一些,只要執行了所採用的分支,只要所有線程都同意採用分支?這將永遠是這種情況。
I.e.序列化總是會發生還是僅在需要時纔會發生?對不起,這個愚蠢的問題。 ;)
我不完全稱它爲重要的。這是維護性能的重要因素。儘管取決於分支機構的複雜程度,但至少在目前爲止我遇到的大多數情況下,優化內存訪問(合併,避免銀行衝突,減少一般流量)要比確保分支機構評估相同的路徑(在某些情況下會對這些優化起作用)。 – Grizzly 2010-08-26 02:07:21
@Grizzly這是至關重要的,如果你使用分支:) – 2010-08-26 20:39:16