이전에 SIMD 연산자를 사용하여 코드 효율성을 향상 시켰지만 해결할 수없는 새로운 오류가 발생했습니다. 이 작업에서는 속도가 가장 중요합니다.어레이 오류 - 액세스 위반 위치 읽기 0xffffffff
데이터를 가져올 때까지 배열의 크기를 알 수 없으며 매우 작거나 (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);
}
}
이 보고서와 같은 중개인에 값을 할당하십시오 : http://social.msdn.microsoft.com/Forums를/da/vclanguage/thread/05b765a2-ef2e-4e45-9229-266d7fe55c0f –
문제가 아니지만'loop/4'는'int'를 리턴 할 것이고, 그 캐스트는 필요 없습니다. – Gorpik