Ошибка SSE HADDPS: «__m256» не называет тип?

Я пытаюсь получить HADDPS инструкция к работе, и я не могу объявить __256 в этом коде.

#include <xmmintrin.h>
#include <emmintrin.h>
#include <pmmintrin.h>
#include <stdio.h>
#include <stdint.h>
#include <iostream>

__m256 HADDPS(__m256 __X, __m256 __Y)
{
return _mm256_hadd_ps (__X, __Y);
}
int main()
{
//horizontal add packed single-------------------------------------------------
__m256 HADDPSA = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m256 HADDPSB = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m256 HADDPSR = HADDPS(HADDPSA, HADDPSB);

return 0;
}

Я использую G ++ с -msse -msse2 -msse3 -msse4,

Это ошибка.

HADDPS.cpp|8|error: '__m256' does not name a type|
HADDPS.cpp||In function 'int main()':|
HADDPS.cpp|15|error: '__m256' was not declared in this scope|
HADDPS.cpp|15|error: expected ';' before 'HADDPSA'|
HADDPS.cpp|16|error: expected ';' before 'HADDPSB'|
HADDPS.cpp|17|error: expected ';' before 'HADDPSR'|

3

Решение

У вас есть небольшой беспорядок, который начинается прямо с нескольких включений, которые у вас есть.

Во-первых, ваш код не является чистым C и не является чистым C ++, это смесь, которая может только причинить вам головную боль, потому что вы не получаете никакой выгоды от этого.

Если вы действительно хотите кодировать на C ++, вы должны добавить extern "C" и удалите C headers участвует, если вы предпочитаете C, я предлагаю удалить это #include <iostream> и использовать gcc вместо g++ ,

Вы также включаете заголовки для нескольких наборов SSE одновременно, обратитесь к эта почта для более чистого подхода.

В конце концов, это исходный код программы, которая пытается имитировать бизнес-логику, которую вы, вероятно, ищете

#include <pmmintrin.h>
#include <immintrin.h>

__m128 HADDPS(__m128 __X, __m128 __Y)
{
return _mm_hadd_ps (__X, __Y);
}

int main()
{
__m128 HADDPSA = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m128 HADDPSB = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m128 HADDPSR = HADDPS(HADDPSA, HADDPSB);

return 0;
}

Вы должны скомпилировать это с

gcc -msse3 main.c
2

Другие решения

Вот пример, который использует тип данных __m256 исходного вопроса. Компилируется без ошибок, используя gcc или g ++ 4.8.1 или VS2012.

// gcc compile command line: gcc -mavx sample.c
// g++ compile command line: g++ -mavx sample.c
// VS2012 compile command line: cl sample.c

#include <intrin.h>

__m256 HADDPS(__m256 __X, __m256 __Y)
{
return _mm256_hadd_ps (__X, __Y);
}
int main()
{
//horizontal add packed single-------------------------------------------------
__m256 HADDPSA = _mm256_set_ps(4.0f, 3.0f, 2.0f, 1.0f, 4.0f, 3.0f, 2.0f, 1.0f);
__m256 HADDPSB = _mm256_set_ps(4.0f, 3.0f, 2.0f, 1.0f, 4.0f, 3.0f, 2.0f, 1.0f);
__m256 HADDPSR = HADDPS(HADDPSA, HADDPSB);

return 0;
}
1

По вопросам рекламы [email protected]