【发布时间】:2016-06-18 09:41:59
【问题描述】:
当我尝试使用 AVX 获取数据时,出现运行时错误 - 分段错误:
int i = 0;
const int sz = 9;
size_t *src1 = (size_t *)_mm_malloc(sz*sizeof(size_t), 32);
size_t *src2 = (size_t *)_mm_malloc(sz*sizeof(size_t), 32);
size_t *dst = (size_t *)_mm_malloc(sz*sizeof(size_t), 32);
__m256 buffer = _mm256_load_si256(&src1[i]);
__m256 buffer2 = _mm256_load_si256(&src2[i+1]); //Segmentation fault in this line
//Something...
_mm256_store_si256(dst[i], buffer);
_mm_free(src1);
_mm_free(src2);
_mm_free(dst);
我通过使用 '_mm256_loadu_si256' 内在函数来解决问题。有人知道为什么会这样吗?
【问题讨论】:
-
如果你的缓冲区是一个小的常数大小,不要
malloc他们!将它们声明为本地数组。在 C99 或 GNU C++ 中,可变长度的局部数组也很有效,只要您知道大小足够小而不会耗尽堆栈。
标签: c++ memory-management vectorization intrinsics avx