【发布时间】:2023-03-27 01:58:02
【问题描述】:
我正在对程序的一部分进行矢量化,但它返回 Segmentation fault 错误。这有什么问题?这是导致问题的简化部分。 j++和i++正是我想要的,我不想成为j += 16。
unsigned short int input[256][256] __attribute__((aligned(32)));//global
for (i = 0; i < 256 - 16; i++) {
for (j = 0; j < 256 - 16; j++) {
temp_v2 =_mm256_load_si256((__m256i *)&input[i][j]);
}
}
【问题讨论】:
-
如果标准功能可用,请勿使用专有扩展。 C 提供了
_Alignas说明符。 -
你的代码违反了严格的别名
-
在 gcc 中我使用
__attribute__(( aligned(X))),以前没有遇到过这样的问题。我可以为严格的别名做些什么? -
在这种情况下不要担心严格的别名 - 你可以像这样使用带有内在函数的强制转换。 gcc 对齐指令也很好 - 人们只是在挑剔。
标签: c x86 simd intrinsics avx2