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/