双精度数组上的 SIMD?
我正在做一些需要 SIMD 的工作,并且我需要对双精度数组进行操作。 主流架构是否支持这个? 我只见过浮点运算。
提前致谢, 斯特凡
I'm doing some work where SIMD is required and I need to do operations on an array of doubles. Do any of the mainstream architectures support this? I've only seen floating point operations.
Thanks in Advance,
Stefan
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的,x86 可以使用 SSE2 指令来做到这一点。 CELL 也是如此,尽管在进行双精度计算时它的性能非常糟糕。
Yes, x86 can do it with the SSE2 instructions. A CELL too, although it's performance is pretty awful when doing double-precision computations.
ARM VFP 也可以做双打。
不幸的是,新的 NEON SIMD 扩展(顺便说一句,这是我迄今为止见过的最好的 SIMD 指令集)只能处理 32 位浮点数。
ARM VFP can do doubles as well.
The new NEON SIMD extension (which is btw. the best SIMD instruction set that I've seen so far) can unfortunatley only deal with 32 bit floats.
这里是 VS2008 中 C++ 编译器支持的 SEE2 内在函数。
正如 jalf 所提到的,CELL 处理器对 SIMD 的双精度支持会严重影响性能(我相信 PS3 中未使用的芯片的后续迭代有很大的改进)。
就主流而言,SSE2 于 2001 年出现在 pentium 4 中,因此在 x86 行业中广泛使用。 根据 steam 硬件调查,95% 的人口患有 SSE2,所以我认为针对它是安全的。
Here's the SEE2 intrinsics supported by the C++ compiler in VS2008.
As mentioned by jalf the CELL processors double precision support for SIMD takes a significant performance hit (I believe later iterations of the chip not used in the PS3 have much improved behaviour).
In terms of main stream SSE2 came in the pentium 4 in 2001 so is widespread in the x86 industry. according to the steam hardware survey 95% of that population has SSE2 so i think it's safe to target it.
以 1.3 或更高计算能力运行的 CUDA 也可以做到这一点。 较新的 GTX 2xx 卡可以做到这一点。
CUDA running at compute capability 1.3 or grater can do it, too. The newer GTX 2xx cards can do this.