Tho*_*mas 6 c++ g++ avx windows64 mingw-w64
我有一个看起来像这样的联盟
union bareVec8f {
__m256 m256; //avx 8x float vector
float floats[8];
int ints[8];
inline bareVec8f(){
}
inline bareVec8f(__m256 vec){
this->m256 = vec;
}
inline bareVec8f &operator=(__m256 m256) {
this->m256 = m256;
return *this;
}
inline operator __m256 &() {
return m256;
}
}
Run Code Online (Sandbox Code Playgroud)
__m256需要在32字节边界上对齐以与SSE函数一起使用,并且应该是自动的,即使在联合内也是如此.
而当我这样做
bareVec8f test = _mm256_set1_ps(1.0f);
Run Code Online (Sandbox Code Playgroud)
我遇到了分段错误.由于我制作的构造函数,此代码应该可以工作.但是,当我这样做
bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
Run Code Online (Sandbox Code Playgroud)
我没有得到分段错误.
因此,因为工作正常,所以联合可能正确对齐,但是看起来构造函数只会导致一些分段错误
我正在使用gcc 64bit windows编译器
---------------------------------编辑Matt设法生成了这里似乎发生的最简单的错误示例.
#include <immintrin.h>
void foo(__m256 x) {}
int main()
{
__m256 r = _mm256_set1_ps(0.0f);
foo(r);
}
Run Code Online (Sandbox Code Playgroud)
我正在编译 -std=c++11 -mavx
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |