Ошибка: _mm_clmulepi64_si128 не был объявлен в этой области - PullRequest
2 голосов
/ 07 февраля 2012

Я пытаюсь использовать инструкцию умножения без переноса, найденную на новом процессоре intel / amd _mm_clmulepi64_si128 ()

Я включил заголовочный файл, и я компилирую с параметрами -maes -msse4 ... но я все еще получаю сообщение об ошибке:

ошибка: _mm_clmulepi64_si128 не был объявлен в этой области

#include < immintrin.h >
#include < wmmintrin.h >

int main()

{

    __m128i a;
    __m128i b;

    a.m128i_i64[1] = 2;
    a.m128i_i64[0] = -1284;
    b.m128i_i64[1] = 25;
    b.m128i_i64[0] = 65535;

    const int product1 = 0x11;
    const int product2 = 0x00;
    const int product3 = 0xF2;

    int expect1 = int ( a.m128i_i64[1] * b.m128i_i64[1] );
    int expect2 = int ( a.m128i_i64[0] * b.m128i_i64[0] );
    int expect3 = int ( a.m128i_i64[0] * b.m128i_i64[1] );

    __m128i result1 = _mm_clmulepi64_si128( a, b, product1 );
    __m128i result2 = _mm_clmulepi64_si128( a, b, product2 );
    __m128i result3 = _mm_clmulepi64_si128( a, b, product3 );

    return 0;
}

Ответы [ 3 ]

3 голосов
/ 28 августа 2012

Вам нужно скомпилировать с -mpclmul и -msse4.1, чтобы использовать _mm_clmulepi64_si128().Вы также должны включить правильный заголовочный файл.Под Clang и GCC, вы должны включить <x86intrin.h>.Intel, VC ++ и другим компиляторам требуется <wmmintrin.h>.

Если ваш процессор современный и поддерживает инструкцию, то -march=native должен получить все функциипроцессор, включая SSE4_1, SSE4_2, PCLMUL, AVX, AVX2, BMI, BMI2 и т. д.

3 голосов
/ 30 августа 2013

Попробуйте

#include <x86intrin.h>

вместо

#include <immintrin.h>

и установите флаг gcc -msse2 -msse4.1 -mpclmul.

0 голосов
/ 07 февраля 2012

Я подозреваю, что управление именами у вас на пути.Убедитесь, что вы используете компилятор C вместо компилятора C ++, то есть вызовите gcc source.c -options .... вместо g ++

И вам все еще нужен процессор, который поддерживает это расширение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...