Неопределенная ссылка в AVX-512
У меня есть код на C, который работает на Xeon Phi и содержит много встроенных функций 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
1 ответ
Набор инструкций AVX-512 был представлен в 2013 году корпорацией Intel, и оборудование Intel Knights Landing (KNL) будет поддерживать этот набор инструкций. Последняя версия Intel(R) C++ Compiler уже поддерживает генерацию кода, ориентированного на AVX-512. Более подробную информацию о проекте Intel Knights Landing можно найти по адресу https://software.intel.com/en-us/articles/what-disclosures-has-intel-made-about-knights-landing.