`__m256` 的包装器使用构造函数产生分段错误 - Windows 64 + MinGW + AVX 问题
Wrapper for `__m256` Producing Segmentation Fault with Constructor - Windows 64 + MinGW + AVX Issues
我有一个看起来像这样的联盟
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;
}
}
__m256 需要在 32 字节边界上对齐才能与 SSE 函数一起使用,并且应该自动对齐,即使在联合内也是如此。
当我这样做时
bareVec8f test = _mm256_set1_ps(1.0f);
我遇到了分段错误。由于我创建的构造函数,这段代码应该可以工作。但是,当我这样做时
bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
我没有遇到分段错误。
因为它工作正常,所以联合可能正确对齐,似乎构造函数导致了一些分段错误
我正在使用 gcc 64 位 windows 编译器
--------------------------------编辑
Matt 设法给出了这里似乎发生的错误的最简单示例。
#include <immintrin.h>
void foo(__m256 x) {}
int main()
{
__m256 r = _mm256_set1_ps(0.0f);
foo(r);
}
我正在编译 -std=c++11 -mavx
我有一个看起来像这样的联盟
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;
}
}
__m256 需要在 32 字节边界上对齐才能与 SSE 函数一起使用,并且应该自动对齐,即使在联合内也是如此。
当我这样做时
bareVec8f test = _mm256_set1_ps(1.0f);
我遇到了分段错误。由于我创建的构造函数,这段代码应该可以工作。但是,当我这样做时
bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
我没有遇到分段错误。
因为它工作正常,所以联合可能正确对齐,似乎构造函数导致了一些分段错误
我正在使用 gcc 64 位 windows 编译器
--------------------------------编辑 Matt 设法给出了这里似乎发生的错误的最简单示例。
#include <immintrin.h>
void foo(__m256 x) {}
int main()
{
__m256 r = _mm256_set1_ps(0.0f);
foo(r);
}
我正在编译 -std=c++11 -mavx