12

我用谷歌搜索了一下,但现在我不清楚某些用 CUDA 编程的 GPU 是否可以利用或可以使用类似于 SSE SIMD 扩展的指令;例如,我们是否可以对两个浮点向量进行双精度求和,每个向量都有 4 个值。如果是这样,我想知道对于向量的前 4 个值中的每一个使用更轻的线程还是使用 SIMD 是否会更好。

4

2 回答 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 回答