cuda - CUDA 标量和 SIMD 视频指令的效率

标签 cuda nvidia simd

SIMD指令的吞吐量低于32位整数运算。 如果是 SM2.0(仅标量指令版本)则低 2 倍。 如果是 SM3.0,则低 6 倍。

什么情况下适合使用它们?

最佳答案

如果您的数据已经以 SIMD 视频指令 native 处理的格式打包,则需要多个步骤对其进行解包,以便可以由普通指令处理。

此外,与普通算术运算相比,SIMD视频指令的吞吐量还应该乘以实际执行的运算次数。

例如,对于指令vadd4 ,正在对打包的 32 位数量(4 字节整数数量)执行 4 次整数加法。为了使用普通整数加法复制此行为,需要相当复杂的指令序列将数据解包为 4 个 int 数量,执行 4 次整数加法,然后重新打包结果。如果您尝试使用单个整数加法来执行此操作,则一个结果的进位可能会损坏下一个结果。 vadd4 还提供了限制能力和其他整数加法所不具备的行为。

就 SM2.0 而言,仅 vadd4 执行的 4 次操作与解包数据所需的 4 次整数加法的比率就足以使其具有吸引力。在 SM3.0 的情况下,当将解包和打包添加到普通整数加法例程时,vadd4 看起来很有吸引力。情况变得更加诱人with cc 5.0 .

关于cuda - CUDA 标量和 SIMD 视频指令的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24634943/

相关文章:

c++ - 使用 tiled_range 推力 sort_by_key - 不重新排序

c++ - CUDA - 在内核中创建对象并在主机上使用它们

c++ - 使用 DirectXMath 中的 XMVECTOR 作为类成员会导致仅在 Release模式下崩溃?

CUDA 合并访问 FP64 数据

cuda - Nvidia GPU 同时访问全局内存中的单个位置

cuda - 在推力中处理交错数据

cuda - 多 GPU 分析(多个 CPU,MPI/CUDA 混合)

arrays - CUDA:如何在 GPU 中将数组的所有元素相加为一个数字?

c - 数据在 C union 中的位置是否有任何标准?

performance - 乘加运算的 Haskell 数学性能