为什么这段代码 return "Segmentation fault" 错误?
Why this code section return "Segmentation fault" error?
我正在对程序的一部分进行矢量化,但出现 returns 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]);
}
}
如果您真的想要重叠加载,您只需将内部循环递增 1(正如您在问题中似乎暗示的那样),那么您需要使用未对齐的加载指令:
for (i = 0; i < 256; i++) {
for (j = 0; j + 16 <= 256; j++) {
temp_v2 = _mm256_loadu_si256((__m256i *)&input[i][j]);
} ^^^^^
}
但这将是一件非常奇怪且效率低下的事情。
通常你会做这样的事情来遍历整个数组:
for (i = 0; i < 256; i++) {
for (j = 0; j < 256; j += 16) {
temp_v2 = _mm256_load_si256((__m256i *)&input[i][j]);
}
}
我正在对程序的一部分进行矢量化,但出现 returns 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]);
}
}
如果您真的想要重叠加载,您只需将内部循环递增 1(正如您在问题中似乎暗示的那样),那么您需要使用未对齐的加载指令:
for (i = 0; i < 256; i++) {
for (j = 0; j + 16 <= 256; j++) {
temp_v2 = _mm256_loadu_si256((__m256i *)&input[i][j]);
} ^^^^^
}
但这将是一件非常奇怪且效率低下的事情。
通常你会做这样的事情来遍历整个数组:
for (i = 0; i < 256; i++) {
for (j = 0; j < 256; j += 16) {
temp_v2 = _mm256_load_si256((__m256i *)&input[i][j]);
}
}