2015-03-31 133 views
0

我有一个在Xeon Phi上运行的C代码,包含许多AVX-512内在函数。未定义的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 15.0.1 20141023

+1

你是否遵循了这些符号(例如'_mm512_cvtepi32_ps')?可能是#define用于创建这些符号,将它们分配给未定义的符号,或者位于尚未包含的头文件中。 *** [看这里](https://gcc.gnu.org/ml/gcc-patches/2014-03/msg00773.html)*** – ryyker 2015-03-31 13:55:00

+0

你是对的。它们在zmmintrin.h定义为: '#定义_mm512_cvtepi32_ps(V)_mm512_cvt_roundepi32_ps((V),_MM_FROUND_CUR_DIRECTION)' 但我仍然不明白为什么'_mm512_cvt_roundepi32_ps'是不确定的。即使它们不在GCC中,它们也应该在ICC中定义 – Zack 2015-03-31 14:02:12

+1

您不能在KNC Xeon Phi上使用AVX-512内在函数,您应该使用KNC内在函数。 https://software.intel.com/sites/landingpage/IntrinsicsGuide/ – 2015-03-31 19:12:09

回答