我正在努力让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'|
答案 0 :(得分:2)
这里你几乎没有什么东西可以从你拥有的多个内容开始。
首先你的代码不是干净的C而且它也不是干净的C ++,它只是让你头疼,因为你没有从中受益。
如果你真的想用C ++编写代码,你应该添加一些extern "C"
并删除所涉及的C headers
,如果你更喜欢CI建议删除#include <iostream>
并使用gcc
而不是g++
。
您还同时包含多个SSE集的标头,请参阅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
答案 1 :(得分:1)
这是一个使用原始问题的__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;
}