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