2014-10-05 3 views
0

Я хочу, чтобы скопировать данные в памяти устройства с помощью cudaMemcpy, вот мой кодCUDA тетсру устройство ошибки устройства

unsigned char* red_src ; 
unsigned char* blue_src ; 
unsigned char* green_src; 

checkCudaErrors(cudaMalloc(&red_src, sizeof(unsigned char) * numRowsSource * numColsSource)); 
checkCudaErrors(cudaMalloc(&blue_src, sizeof(unsigned char) * numRowsSource * numColsSource)); 
checkCudaErrors(cudaMalloc(&green_src, sizeof(unsigned char) * numRowsSource * numColsSource)); 

//bla bla .......... 

//initialization 
compute_g<<<grid, block>>>(red_src, strictInteriorPixels,g_red, numRowsSource, numColsSource); 
compute_g<<<grid, block>>>(blue_src, strictInteriorPixels,g_blue, numRowsSource, numColsSource); 
compute_g<<<grid, block>>>(green_src, strictInteriorPixels,g_green, numRowsSource, numColsSource); 

float *blendedValsRed_1 ; 
float *blendedValsRed_2 ; 

//set memory 
checkCudaErrors(cudaMalloc(&blendedValsRed_1, sizeof(float) * numRowsSource * numColsSource)); 
checkCudaErrors(cudaMalloc(&blendedValsRed_2, sizeof(float) * numRowsSource * numColsSource)); 

checkCudaErrors(cudaMemcpy(blendedValsRed_1, red_src, sizeof(float) * numRowsSource * numColsSource,cudaMemcpyDeviceToDevice)); 
checkCudaErrors(cudaMemcpy(blendedValsRed_2, red_src, sizeof(float) * numRowsSource * numColsSource,cudaMemcpyDeviceToDevice)); 

компилирует, но когда я пытаюсь запустить его, получил сообщение об ошибке в cudaMemcpy, заявив, что:

tintin ~/programming/cs344/Problem Sets/Problem Set 6 $ optirun ./HW6 source.png  destination.png 
CUDA error at: student_func.cu:365 
invalid argument cudaMemcpy(blendedValsRed_1, red_src, sizeof(float) * numRowsSource * numColsSource,cudaMemcpyDeviceToDevice) 

Любой может помочь, спасибо!

ответ

4

Я не очень уверен, что это точная причина вашей ошибки, но вот одна вещь, что вы делаете неправильно:

Вы выделения памяти для red_src с размером sizeof(unsigned char) * SOMETHING:

checkCudaErrors(cudaMalloc(&red_src, sizeof(unsigned char) * numRowsSource * numColsSource)); 

при попытке получить к нему доступ с размером sizeof(float) * SOMETHING:

checkCudaErrors(cudaMemcpy(blendedValsRed_1, red_src, sizeof(float) * numRowsSource * numColsSource,cudaMemcpyDeviceToDevice)); 
Смежные вопросы