これは私のコードです。行列d_refを初期化してデバイスにコピーします。私が正しくcudaMallocPitchとcudaMemcpy2Dを使用している場合、私はわからないが、私はcudaMemcpy2Dを使用しようと、私は出力に入る私はCUDAでcudaMallocPitchとcudaMemcpy2Dを使用していますが、正しい答えは得られません!
すべてCUDA programming guideの下の20ページには、私のコードで間違って何0
のですか?この仕事をする最良の方法ですか?
ありがとうございます。
__host__
float *d_ref;
float **h_ref = new float* [width];
for (int i=0;i<width;i++)
h_ref[i]= new float [height];
for (int i=0;i<width;i++){
for (int j=0;j<height;j++){
h_ref[i][j]=ref_list[j][i]; //transpose
}
}
size_t ref_pitch;
cudaMallocPitch(&d_ref, &ref_pitch, width * sizeof(float), height);
cudaMemcpy2D(d_ref, ref_pitch, h_ref, width*sizeof(float),width*sizeof(float), height*sizeof(float), cudaMemcpyHostToDevice);
lowerBound<<<grid, block>>>(d_ref, ...
__global__ void lowerBound (float* d_ref, ....
float* ref = (float*)((char*)d_ref + blockIdx.x * ref_pitch);
cuPrintf(" %f \n",ref[threadIdx.x]);
ありがとうございます!私はcudaMemcpy2Dのh_refの隣に星を追加して解決しました。 \t cudaMemcpy2D(d_ref、ref_pitch、* h_ref、width * sizeof(float)、width * sizeof(float)、hight、cudaMemcpyHostToDevice); – Kiarash
href [i]によって指し示される個々の列ベクトルが連続して格納されるという保証はないので、コードを変更してもいつでも失敗する可能性があります。 – njuffa
大丈夫です!私はまだそれに問題があります。どうやらそれは正しくコピーされません。配列の定義を動的から静的に変更しましたが、まだ動作していません。私は1Dへの変更が解決策であることを知っていますが、どのように私はcudaMallocPitchとcudaMemcpy2Dを使用できますか? 2Dでそれを行う方法があるはずです... – Kiarash