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)を返しました。その上で値を抽出するために*演算子を使用しなければなりませんでした。 –
アレイの読み込み帯域幅によって制限される速度とほぼ同じ速度でなければなりません。 –