C++ SSE HADDPS错误:'__m256和x27;不命名类型?

C++ SSE HADDPS错误:'__m256和x27;不命名类型?,c++,types,g++,sse,intrinsics,C++,Types,G++,Sse,Intrinsics,我试图让HADDPS指令正常工作,但我似乎无法在此代码中声明\uu 256 #include <xmmintrin.h> #include <emmintrin.h> #include <pmmintrin.h> #include <stdio.h> #include <stdint.h> #include <iostream> __m256 HADDPS(__m256 __X, __m256 __Y) { ret

我试图让
HADDPS
指令正常工作,但我似乎无法在此代码中声明
\uu 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;
}

这里有一点混乱,从你拥有的多个内含物开始

首先,你的代码不是干净的C,它也不是干净的C++,它只是一种混合,它只能给你带来头痛,因为你没有从中得到任何好处。

如果您真的想在C++中编码,您应该添加一些代码>外部“C”<代码>,并移除“<代码> C标题>代码>,如果您喜欢C,建议删除< <代码>包含<代码> >使用<代码> GCC < /C> >代替<代码> G++< /C> > 您还同时包括多个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;
}

下面是一个使用原始问题的_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;
}
//gcc编译命令行:gcc-mavx sample.c
//g++编译命令行:g++-mavx sample.c
//VS2012编译命令行:cl sample.c
#包括
__m256 HADDP(uuuM256_uuuuuux,uuum256_uuy)
{
返回_mm256_hadd_ps(uuux,uuy);
}
int main()
{
//水平加包装单-------------------------------------------------
__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);
返回0;
}

如果您添加
-mavx
,它是否有效?这是一个编译器错误,因此我不希望
-mavx
在任何方面都能起到很大的作用,但没有,我尝试使用该标志和相同的错误进行链接。我想提及
-msse-msse2-msse3-msse4也毫无意义。不,不要尝试与它链接,尝试用它编译。@user2555139
\uuuum256
是一种AVX数据类型。除非您启用
-mavx
,否则它不存在。是的,您需要
。非常好用!谢谢我将在C++程序中用ExtC C来试试这个。难道<代码>包含了<代码>微软的东西吗?我尝试将该头与GCC一起使用,但找不到。@user2555139您应该将包含的内容更改为
x86intrin.h
imintrin.h
,但请记住,AVX指令远不如SSE指令受欢迎。我的GCC测试是在Windows+mingw下完成的,因此完全有可能linux的GCC不支持#包括。cygwin也不包含。我在windows上使用cygwin,这些是我可用的标题。
gcc -msse3 main.c
// 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;
}