g ++ - 4.8中缺少AVX日志内在函数(_mm256_log_ps)?

amc*_*ley 9 c++ g++ intrinsics avx

我试图在我的代码中使用一些AVX内在函数,并遇到了对数内在函数的砖墙.

使用适用于Linux的英特尔intrinsics指南v3.0.1,我看到内在_mm256_log_ps(__m256)列为"immintrin.h"的一部分,并且在我当前的arch上也受支持.

但是,尝试编译这个简单的测试用例失败,并显示"错误:'_ mm256_log_ps'未在此范围内声明"

这个例子是用编译的 g++-4.8 -march=native -mavx test.cpp

#include <immintrin.h>
int main()
{
        __m256 i;
        _mm256_log_ps(i);
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些基本的东西吗?某些内在函数是否不受g ++支持且仅在icc中可用?

已解决:此指令不是真正的内在指令,而是作为ICC的英特尔SVML的一部分实现的.

Jas*_*n R 9

如您对问题的评论所示,该内在函数不会映射到实际的AVX指令; 它是英特尔对内在集的扩展.实现可能使用许多底层指令,因为对数不是一个简单的操作.

如果你想使用一个非英特尔的编译器,但要快速执行对数,你可以看看这个开源实现sin(),cos(),exp(),和log()使用AVX功能.它们基于相同功能的早期SSE2版本.