我使用SSE类型(如__m128
(在xmmintrin.h
等中定义))做了一些明确的向量化计算,但现在我需要将向量的所有元素都提升为一些(相同)功率,即理想情况下我想像__m128 _mm_pow_ps(__m128, float)
,这不幸不存在。对于SSE类型的功能
这是最好的方法是什么?我可以存储矢量,在每个元素上调用std::pow
,然后重新加载它。这是我能做的最好的吗?自动矢量化代码时,编译器如何实现对std::pow
的调用?有没有提供有用的东西的库?
(注意:this question是不是重复相关的,当然没有一个有用的答案。)
我用http://gruntthepeon.free.fr/ ssemath/for'exp/log'并且在自动矢量化不是一个选项时写'pow(x,k)'为'exp(k * log(x)'。不知道它与自动矢量化代码的比较。 – SleuthEye 2014-09-19 14:47:23
你可以使用Agner Fog的矢量类,他具有SSE,AVX和AVX512的SIMD数学函数(包括pow,exp,log,sin,...)并浮动和整数。我认为没有任何理由使用英特尔的SVML或AMD的libm了。 – 2014-09-20 15:01:02
@Zboson,是否有一个很好的支持SSE4的'exp()'的C库? – Royi 2017-10-30 19:00:09