我用谷歌搜索了一下,但现在我不清楚某些用 CUDA 编程的 GPU 是否可以利用或可以使用类似于 SSE SIMD 扩展的指令;例如,我们是否可以对两个浮点向量进行双精度求和,每个向量都有 4 个值。如果是这样,我想知道对于向量的前 4 个值中的每一个使用更轻的线程还是使用 SIMD 是否会更好。
问问题
9342 次
2 回答
22
CUDA 程序编译为PTX 指令集。该指令集不包含 SIMD 指令。因此,CUDA 程序不能显式使用 SIMD。
然而,CUDA 的整个想法是大规模地做 SIMD。单个线程是称为 warp 的组的一部分,其中每个线程都执行完全相同的指令序列(尽管某些线程可能会抑制某些指令,从而产生不同执行序列的错觉)。NVidia 将其称为单指令多线程 (SIMT),但它本质上是 SIMD。
于 2011-03-08T22:22:14.973 回答
8
正如对其中一个回复的评论中提到的,NVIDIA GPU 有一些 SIMD 指令。它们以unsigned int
每字节和每半字为基础进行操作。截至 2015 年 7 月,以下操作有多种形式:
- 绝对值
- 加法/减法
- 计算平均值
- 比较
- 最大/最小
- 否定
- 绝对差之和
于 2015-07-06T03:01:59.000 回答