gpt4 book ai didi

c++ - 数组错误 - 读取位置 0xffffffff 的访问冲突

转载 作者:太空狗 更新时间:2023-10-29 19:59:28 24 4
gpt4 key购买 nike

我以前使用 SIMD 运算符来提高我的代码的效率,但是我现在面临一个我无法解决的新错误。对于这项任务,速度至关重要。

数组的大小在导入数据之前是未知的,并且可能非常小(100 个值)或非常大(1000 万个值)。对于后一种情况,代码工作正常,但是当我使用少于 130036 个数组值时遇到错误。

有谁知道导致此问题的原因以及如何解决?

我附上了所涉及的(测试过的)代码,后面会在更复杂的功能中用到。错误发生在“arg1List[i] = ...”

#include <iostream>
#include <xmmintrin.h>
#include <emmintrin.h>

void main()
{
int j;
const int loop = 130036;
const int SIMDloop = (int)(loop/4);
__m128 *arg1List = new __m128[SIMDloop];

printf("sizeof(arg1List)= %d, alignof(Arg1List)= %d, pointer= %p", sizeof(arg1List), __alignof(arg1List), arg1List);
std::cout << std::endl;

for (int i = 0; i < SIMDloop; i++)
{
j = 4*i;
arg1List[i] = _mm_set_ps((j+1)/100.0f, (j+2)/100.0f, (j+3)/100.0f, (j+4)/100.0f);
}
}

最佳答案

对齐是原因。

MOVAPS--Move Aligned Packed Single-Precision Floating-Point Values

[...] The operand must be aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.

一旦您对齐指针,您就可以看到问题消失了:

__m128 *arg1List = new __m128[SIMDloop + 1];
arg1List = (__m128*) (((int) arg1List + 15) & ~15);

关于c++ - 数组错误 - 读取位置 0xffffffff 的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com