簡體   English   中英

使用AVX上的AVX2 / AVX512內在函數編譯C ++代碼

[英]Compile C++ code with AVX2/AVX512 intrinsics on AVX

我有生產代碼,其中包含為各種SIMD指令集實現的內核,包括AVX,AVX2和AVX512。 可以在目標機器上為目標機器編譯代碼,例如./configure --enable-proc=AVX CXXFLAGS="-mavx"

這也適用於暴露AVX內在函數的Travis CI。 我想至少編譯AVX2和AVX512版本,以查看是否所有文件都已簽入。但似乎編譯不同的ISA並不容易。

一個簡單的AVX2測試程序:

#include <immintrin.h>

int main(int argc, char **argv) {
    __m256d a;
    __m256d b;
    __m256d c;

    _mm256_fnmadd_pd(a, b, c);
}

在我的AVX機器(英特爾酷睿i5-2520M)上,它無法編譯:

$ g++ -Wall -Wpedantic --std=c++11 cpp.cpp -mavx2
In file included from /usr/lib/gcc/x86_64-redhat-linux/6.3.1/include/immintrin.h:79:0,
                 from cpp.cpp:3:
/usr/lib/gcc/x86_64-redhat-linux/6.3.1/include/fmaintrin.h:143:1: error: inlining failed in call to always_inline '__m256d _mm256_fnmadd_pd(__m256d, __m256d, __m256d)': target specific option mismatch
 _mm256_fnmadd_pd (__m256d __A, __m256d __B, __m256d __C)
 ^~~~~~~~~~~~~~~~

有沒有辦法編譯代碼? 我不關心跑步,我只想要一個煙霧測試。

提供-march=sandybridge-march=haswell-march=knl啟用所有需要的功能來翻譯代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM