2013-07-09 3 views
0

Im учится использовать intrinsics вместо asm-inlining. Вчера они работали, но сегодня я всегда получаю ошибку. Ничего не изменил.C++ Внутренний не объявлен

#include <iostream> 
#include <intrin.h> // immintrin.h, smmintrin.h ... tried all, never worked 

using namespace std; 

    int main() 
    { 
     _m256_zeroupper(); // __mm256_zeroupper(); does not work too 
     _mm128 x; // __mm128 x; does not work too 
     _mm256 y; // __mm256 y; does not work too 
     _m256_zeroupper(); // __mm256_zeroupper(); does not work too 
     cout << "Hello world!" << endl; 
     return 0; 
    } 

Вот ошибки. Я пробовал все файлы заголовков для разных встроенных функций, но ошибки были одинаковыми. Также переустановил gcc, но не работал.

Где я ошибаюсь? Что мне нужно добавить, чтобы фактически объявить эти внутренние переменные и функции?

C:\indirmeDenemesi\hello_intrin\main.cpp||In function 'int main()':| 
C:\indirmeDenemesi\hello_intrin\main.cpp|8|error: '_mm256_zeroupper' was not declared in this scope| 
C:\indirmeDenemesi\hello_intrin\main.cpp|9|error: '_mm128' was not declared in this scope| 
C:\indirmeDenemesi\hello_intrin\main.cpp|9|error: expected ';' before 'x'| 
C:\indirmeDenemesi\hello_intrin\main.cpp|10|error: '_mm256' was not declared in this scope| 
C:\indirmeDenemesi\hello_intrin\main.cpp|10|error: expected ';' before 'y'| 
||=== Build finished: 5 errors, 0 warnings (0 minutes, 0 seconds) ===| 

Использование 64-разрядной последней версии gcc на 64-битном процессоре с 64-битными окнами. Процессор FX8150. Tried -march = bdver1 -mtune = bdver1, и это вызвало сотни ошибок нежелательной почты.

Все это означает, что мой процессор умирает?

Редактировать: Некоторые другие проекты работают сейчас, но я ничего не менял. Это должно быть специфическое для проекта. Использование кода :: блоков, и когда я нажимаю правой кнопкой мыши на заголовок и выбираю «открывать», он дает ошибку «не удалось найти», но не дает никакой ошибки при компиляции, связанной с этим, просто ошибка для команд intrinsinc. То же самое для рабочих проектов (они компилируют все и работают, но не находят файлы заголовков при щелчке правой кнопкой мыши и открытии). Может быть, некоторые другие сервисы Windows вмешивались? Я не знаю, но ошибки компилятора исчезают и приходят снова, время от времени. Повторная установка также кодовых блоков не решила. Только некоторые проекты могут использовать встроенные функции, в то время как другие проекты не могут (даже если все проекты имеют одинаковые заголовки.)

Этот код не работает.

#include <iostream> 
#include <immintrin.h> 
using namespace std; 

int main() 
{ 
    _m256_zeroupper(); 

    __mm128 x; 

    __mm256 y; 

    _m256_zeroupper(); 
    cout << "Hello world!" << endl; 
    return 0; 
} 
+0

Какие опции компилятора вы используете? Включили ли вы подходящий тип процессора? –

+0

Помните, что внутренняя среда компилятора очень специфична для компилятора. Проверьте [онлайн-документацию] (http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Target-Builtins.html#Target-Builtins) на функциональность, доступную в GCC для своих целей. –

+0

FX-8150 Tried -march = bdver1 -mtune = bdver1, и это вызвало сотни ошибок нежелательной почты. –

ответ

5

Три вещи должны сделать код работу:

  1. Убедитесь, что вы с помощью -mavx компиляции флага.

  2. Ваша переменная должна быть объявлена ​​как __m256 не _mm256.

  3. Убедитесь, что вы в том числе immintrin.h

+0

Или лучше, '-march = native' или' -march = haswell', а не только '-mavx'. См. Также https://stackoverflow.com/questions/38662287/issue-with-m256-type-of-intel-intrinsics re: gcc 'tune = generic', расщепляющий unaligned 256b загружает/хранит в' movdqu'/'vinsertf128'. Или используйте '-mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store', если вы на самом деле не настроитесь на SnB, а ваши данные на самом деле * не выравниваются в большинстве случаев. –

Смежные вопросы