0
考慮下面的代碼,當p是分配GPU端的指針時。推力沒有提供使用推力的預期結果:: minimum
thrust::device_ptr<float> pWrapper(p);
thrust::device_ptr<float> fDevPos = thrust::min_element(pWrapper, pWrapper + MAXX * MAXY, thrust::minimum<float>());
fRes = *fDevPos;
*fDicVal = fRes;
在cpu端應用相同的東西后。
float *hVec = new float[MAXX * MAXY];
cudaMemcpy(hVec, p, MAXX*MAXY*sizeof(float), cudaMemcpyDeviceToHost);
float min = 999;
int index = -1;
for(int i = 0 ; i < MAXX* MAXY; i++)
{
if(min > hVec[i])
{
min = hVec[i];
index = i;
}
}
printf("index :%d a wrapper : %f, as vectorDevice : %f\n",index, fRes, min);
delete hVec;
我明白了!= fRes。我在這裏做錯了什麼?
哪種方式更快?我用你昨天晚上寫給我的方式,它返回一個指針(device_ptr)。我不得不使用*運算符來提取值。 – 2012-03-16 07:16:01
它們的速度應該幾乎相同,因爲它們都受讀取陣列帶寬的限制。 – 2012-03-16 18:44:31