Il y a une différence très petite mais reconnaissable entre ma multiplication régulière et cuda de l'image. L'image régulière est un peu plus légère.Pourquoi y a-t-il une différence très petite mais reconnaissable entre ma multiplication régulière et cuda de l'image?
principale part de la fonction:
Mat im1 = imread("1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
int size = im1.rows * im1.cols;
int i = 0;
uint8_t * d_a;
im1 = im1 * 3; //this made image a little lighter comparatively.
imshow("Original", im1);
cudaMalloc(&d_a, sizeof(uint8_t)*size);
cudaMemcpy(d_a, &im1.data[0], sizeof(uint8_t)*size, cudaMemcpyHostToDevice);
dim3 threadsPerBlock(im1.cols);
dim3 numBlocks(im1.rows);
colonal << <numBlocks, threadsPerBlock >> >(d_a);
cudaMemcpy(&im1.data[0], d_a, sizeof(uint8_t)*size, cudaMemcpyDeviceToHost);
cudaFree(d_a);
imshow("new", im1);
waitKey();
Voici le noyau:
__global__
void colonal(uint8_t * a)
{
int x = blockIdx.x;
int y = threadIdx.x;
int width = blockDim.x;
int index = (x * width)+y;
a[index] = a[index] * 3;
}
Lorsque vous demandez une aide au débogage, vous devez fournir un [mcve] Ce que vous avez fourni ne l'est pas. –
Lorsque la question est essentiellement "repérer mon erreur triviale à partir de cet exemple incomplet", vous n'apportez rien qui puisse aider les autres ou ajouter à l'ensemble des informations CUDA utiles sur [SO]. C'est pourquoi cette question a été votée. – talonmies