Ceci est mon code, initialisant une matrice d_ref et la copiant sur le périphérique. Je ne sais pas si j'utilise cudaMallocPitch et cudaMemcpy2D correctement mais j'ai essayé d'utiliser cudaMemcpy2D et en bas de page 20 de CUDA programming guideJ'utilise cudaMallocPitch et cudaMemcpy2D dans CUDA mais je ne reçois pas de réponse correcte!
Tout ce que je reçois en sortie est 0.
Quel est le problème avec mon code? et est-ce la meilleure façon de faire ce travail?
Merci d'avance.
__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]);
Merci! Je l'ai résolu en ajoutant une étoile à côté de h_ref dans cudaMemcpy2D. \t cudaMemcpy2D (d_ref, ref_pitch, * h_ref, largeur * sizeof (flottant), largeur * sizeof (flottant), hight, cudaMemcpyHostToDevice); – Kiarash
Veuillez noter qu'il n'y a aucune garantie que les vecteurs de colonne individuels pointés par href [i] seront stockés de manière contiguë, donc même après avoir changé le code pourrait toujours échouer à tout moment. – njuffa
okay! J'ai toujours un problème avec ça. Apparemment, il ne copie pas correctement. J'ai changé ma définition de tableau de dynamique à statique mais ça ne marche toujours pas. Je sais que le passage à 1D est une solution mais comment puis-je utiliser cudaMallocPitch et cudaMemcpy2D? Il devrait y avoir un moyen de le faire en 2D ... – Kiarash