AVX循环矢量化中的奇怪错误
Strange error in AVX loop vectorization
当我尝试用AVX展开最简单的循环时,我得到运行时错误-分段错误:
const int sz = 9;
float *src = (float *)_mm_malloc(sz*sizeof(float), 16);
float *dest = (float *)_mm_malloc(sz*sizeof(float), 16);
for(int i=0; i<8; i+=8)
{
__m256 buffer = _mm256_load_ps(src+i);
_mm256_store_ps(dest+i, buffer);
}
_mm_free(src);
_mm_free(dest);
有趣的是:如果sz=8或>=13,运行时不会崩溃。否则会出现分段错误。
怎么了?
编译器-gcc 4.7。
将对齐提高到32会使症状消失。
我不太熟悉这些本质,但如果在64位CPU 上需要32
字节对齐,我不会感到惊讶
#include <mm_malloc.h>
#include <immintrin.h>
int main()
{
const int sz = 9;
float *src = (float *)_mm_malloc(sz*sizeof(float), 32);
float *dest = (float *)_mm_malloc(sz*sizeof(float), 32);
for(int i=0; i<8; i+=8)
{
__m256 buffer = _mm256_load_ps(src+i);
_mm256_store_ps(dest+i, buffer);
}
_mm_free(src);
_mm_free(dest);
}
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 方法内部但循环仍得到预期的不合格id错误C++
- C++ - 循环访问指针数组会导致错误
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- For 循环 C++ 中的值错误
- 为什么我的 for 循环给出错误:X 没有命名类型
- 类方法 - 数据结构中 For 循环的运行时错误
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 如何向用户显示特定错误,要求他/她使用循环再次提供输入?
- 循环 c++ 中的分段错误
- 虽然循环即使应用了错误条件也不会退出
- 错误 C2512 视觉C++(并且不是循环依赖项)
- 使用基于范围的指针循环和向量时出现C++错误
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 在指针迭代中使用for循环时出现分段错误
- 向量循环抛出2个错误
- for 循环说 - 错误 成员引用基类型"int [13]"不是结构或联合
- C++,查找最低值,函数错误:循环最多运行一次(循环增量从未执行)