我有一个在Xeon Phi上运行的C代码,包含许多AVX-512内在函数。
代码编译得很好,直到以下几行:
#ifdef __MIC__
__m512i mm_idx = _mm512_set_epi32(0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
__m512 mm_temp1 = _mm512_set1_ps(temp1);
__m512 mm_temp2 = _mm512_set1_ps(temp2);
__m512i mm_temp3 = _mm512_cvttps_epi32(_mm512_fmadd_ps(_mm512_cvtepi32_ps(mm_idx), mm_temp2, mm_temp1));
#else something else
编译器发出以下错误:
undefined reference to '_mm512_cvt_roundepi32_ps'
undefined reference to '_mm512_cvtt_roundps_epi32'
我的第一个问题是,为什么编译器会将_mm512_cvttps_epi32
和_mm512_cvtepi32_ps
转换为_mm512_cvtt_roundps_epi32
和_mm512_cvt_roundepi32_ps
?
第二个问题是,为什么这些内在函数特别未定义? 我在顶部有以下内容:
#include <immintrin.h>
#include <smmintrin.h>
#include <zmmintrin.h>
我正在使用icc(ICC)15.0.1 20141023
答案 0 :(得分:1)
AVX-512指令集于2013年由英特尔推出,英特尔Knights Landing(KNL)硬件将支持该指令集。最新版本的英特尔(R)C ++编译器已经支持生成针对AVX-512的代码。有关英特尔Knights登陆项目的更多信息,请访问https://software.intel.com/en-us/articles/what-disclosures-has-intel-made-about-knights-landing。