我使用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