Chm*_*lok 5 windows trigonometry sse x86-64 avx
我正在尝试编写一个 C++ 程序,它启动我在 x64 汇编程序中编写的函数。我想稍微加快速度(并利用 CPU 功能),所以我选择使用向量运算。
问题是,我必须将正弦乘以一个整数,所以我必须首先计算正弦。在 SSE/AVX 中可以做到这一点吗?我知道指令fsin,但它不仅在 FPU 中,而且它一次只计算 1 个正弦。所以我必须将它推入 FPU,调用fsin,将其从 FPU 弹出到内存,然后将其放入 AVX 寄存器。在我看来,这不值得这么麻烦。
是的,有一个使用 SSE/AVX 的矢量版本! 但问题是必须使用 Intel C++ 编译器。
这称为英特尔小型矢量数学库(内在函数):
对于 128 位 SSE,请使用(双精度):_mm_sin_pd
对于 256 位 AVX,请使用(双精度):_mm256_sin_pd
这两个内在函数实际上是由手写的 SSE/AVX 程序集组成的非常小的函数,现在您可以使用 AVX 一次处理 4 个正弦计算:=) 在 Haswell CPU 上延迟约为 10 个时钟周期(如果我没记错的话) 。
顺便说一句,CPU 需要执行大约 100 个这样的内在函数来预热并达到其峰值性能,如果只需要评估几个 sin 函数,最好使用普通的 sin() 来代替。
祝你好运!!
| 归档时间: | 
 | 
| 查看次数: | 5078 次 | 
| 最近记录: |