我正在阅读this书,深入研究CUDA的概念。其中一章介绍了SIMT的概念,
SIMT中控制流分歧的选项还简化了程序员使用额外指令来处理的要求 控制流量与SSE相比。
我知道这个陈述是基于SSE在SIMD实现技术上工作而CUDA线程在SIMT原理上工作的事实,但是任何人都可以使用一些例子详细说明/解释这句话。 提前谢谢。
答案 0 :(得分:10)
如果您有一个例程,其中某些元素需要以不同于其他元素的方式处理,那么您需要明确地处理屏蔽操作,以便它们仅应用于正确的元素。使用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