當我試着使用AVX獲取數據,我得到運行時錯誤 - 分段故障:錯誤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++中,可變長度的本地數組也是非常高效的,只要您知道大小足夠小,不會耗盡堆棧。 –