CUDA可以使用SIMD扩展吗?

Ope*_*way 12 cuda gpu sse simd vectorization

我稍微谈了一下,但现在我不清楚是否有一些使用CUDA编程的GPU可以利用或者可以使用类似于SSE SIMD扩展的指令; 例如,我们是否可以在双精度中总结两个浮点向量,每个向量具有4个值.如果是这样,我想知道为向量的前4个值中的每一个使用更轻的线程或者使用SIMD是否更好.

Tom*_*son 18

CUDA程序编译为PTX指令集.该指令集不包含SIMD指令.因此,CUDA程序无法明确使用SIMD.

然而,CUDA的整个想法是大规模地进行SIMD.单个线程是称为warps的组的一部分,其中每个线程执行完全相同的指令序列(尽管某些线程可能会抑制某些指令,从而产生不同执行序列的错觉).NVidia将其称为单指令,多线程(SIMT),但它基本上是SIMD.

  • PTX 3.0增加了对一组有限的SIMD-in-a-words指令的支持,这些指令对寄存器中的8位和16位数据进行操作.这些说明详细介绍了最新PTX规范的第178-182页:http://docs.nvidia.com/cuda/pdf/ptx_isa_3.1.pdf使用这些SIMD指令要求GPU具有3.x的计算能力.已注册的CUDA开发人员可以下载带有包装函数的头文件(也为sm_1x和sm_2x GPU提供仿真路径),如下所示:https://devtalk.nvidia.com/default/topic/535684/announcements/release-1- 1-的-SIMD功能于一个字函数发布/ (14认同)
  • @njuffa:这听起来像是一个答案,而不是评论!发布它,我们可以说服流动改变他的接受. (3认同)

Ale*_*eev 7

正如其中一篇回复的评论中提到的,NVIDIA GPU有一些SIMD指令.它们以unsigned int每字节和每半字为基础进行操作.截至2015年7月,有以下几种类型的操作:

  • 绝对值
  • 加法/减法
  • 计算平均值
  • 对比
  • 最大/最小值
  • 否定
  • 绝对差值之和

  • https://docs.nvidia.com/cuda/cuda-math-api/group__CUDA__MATH__INTRINSIC__SIMD.html (2认同)