2017-01-03 3 views
1

Ich habe einen Fehler unten, wenn ein Programm (test.cpp) kompiliert wird:Kann ein C++ Programm mit AVX512 kompilieren?

> g++ -o test test.cpp -O2 -mavx -msse4.1 
test.cpp: In function ‘int main(int, char**)’: 
test.cpp:18:42: error: ‘_mm_rorv_epi32’ was not declared in this scope 
    indice = _mm_rorv_epi32(indice, offset4); 
             ^

Das Programm (main.cpp):

#include <stdio.h> 
#include <stdlib.h> 
#include <immintrin.h> 

int main(int argc, char* argv[]) { 
    float values[4] = {1., 2., 3., 4.}; 
    __m128i offset4 = _mm_set_epi32(0, 2, 4, 6); 
    __m128i mask4 = _mm_set_epi32(3, 3, 3, 3); 
    __m128 value4 = _mm_load_ps(&values[0]); 
    __m128 res; 

    float result[4]; 

    // load a constant integer 4 times 
    __m128i indice = _mm_set1_epi32(123); // 123 is a fake example 

    // shift 
    indice = _mm_rorv_epi32(indice, offset4); 
    // and 
    indice = _mm_and_si128(indice, mask4); 

    // lookup 
    res = _mm_permutevar_ps(value4, indice); 
    // store 
    _mm_store_ps(result, res); 

    for (int i = 0; i < 4; i++) { 
    printf("result[%d] = %g\n", i, result[i]); 
    } 
    return 0; 
} 

ich die Header-Datei immintrin.h nach dem beinhaltete Intel Handbuch. Die g++ Version ist 4.9.3.

Wie kann ich das Compilieren Problem zu lösen und _mm_rorv_epi32 verwenden?

Antwort

2

_mm_rorv_epi32

Nach Intel page auf _mm_rorv_epi32 erfordert diese intrinsische avx512f und avx512vl. Sie müssen sich mit -mavx512vl kompilieren (und Ihre gcc zu alt ist - -mavx512vl war added in gcc-5.1) zu ermöglichen.

Verwandte Themen