我正在尝试使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;
}

我正在使用带有-msse -msse2 -msse3 -msse4的g++。

这是错误。
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'|

最佳答案

从这里的多个杂物开始,您几乎一团糟。

首先,您的代码不是纯净的C语言,也不是纯净的C++,这是一种混合,只会让您头疼,因为您没有从中获得任何好处。

如果您真的想用C++编写代码,则应添加一些extern "C"并删除涉及的C headers,如果您更喜欢C,我建议删除该#include <iostream>并使用gcc而不是g++

您还将同时包含多个SSE集的 header ,有关更简洁的方法,请引用this post

最后,这是一个试图模仿您可能正在寻找的业务逻辑的程序的源代码

#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

关于c++ - SSE HADDPS错误: '__m256'没有命名类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17508392/

10-09 04:10