![](/img/trans.png)
[英]How would you write feature agnostic code for both AVX2 and AVX512?
[英]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.