2012-12-31 62 views
4

我正在閱讀this書,深入研究CUDA的概念。在章節之一,它引入了SIMT的概念,它說SIMT和SIMD中的控制流散度

在SIMT控制流動發散的選項也簡化了要求供程序員使用額外的指令相比,SSE處理 控制流。

我知道這種說法是基於SSE適用於SIMD實現技術和CUDA線程上SIMT的工作原理是這樣的事實作出的,但任何人都可以精心/這句話用一些例子來解釋。 在此先感謝。

回答

8

使用SIMD如果您有一個例程,其中一些元素需要與其他元素不同處理,那麼您需要明確地處理掩蔽操作,以便它們僅應用於正確的元素。使用CUDA的SIMT體系結構,您可以在每個線程上獲得控制流的錯覺,因此您不需要顯式屏蔽操作 - 當然這仍然是「隱藏的」,但負擔卻從程序員中解脫出來。

例如:假設您想要將所有負元素設置爲零。在CUDA:

if (X[tid] < 0) 
    X[tid] = 0; // NB: CUDA core steps through this instruction but only executes 
        //  it if the preceding condition was true 

在SIMD(SSE):

__m128 mask = _mm_cmpge_ps(X, _mm_set1_ps(0)); // generate mask for all elements >= 0 
X = _mm_and_ps(X, mask);      // clear all elements which are < 0