我以前使用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',不需要這個cast。 – Gorpik