0
을 사용하여 예상 결과를 제공하지 않습니다. p가 GPU 측에 할당 된 포인터 인 경우 다음 코드를 고려하십시오.추력은 : thrust :: 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;
나는 min! = fRes를 얻습니다. 여기서 내가 뭘 잘못하고 있니?
어떤 방식으로 더 빠릅니까? 나는 어젯밤에 당신이 저에게 쓴 방법을 사용했고 그것은 포인터 (device_ptr)를 돌려주었습니다. 여기에서 * 연산자를 사용하여 값을 추출해야했습니다. –
그들은 배열을 읽는 대역폭에 따라 제한되는 것과 거의 같은 속도 여야합니다. –