2013-10-09 7 views
0

Вот мой код программы, которая выполняет гистограмму на изображении, а затем сканирование суммы префикса на гистограмме http://codepad.org/4RMtWn1e. Проблема заключается в строке 396, которая правильно выводит значение numBins (количество бункеров для гистограммы) на 1024. Я чем копирую гистограмму из памяти устройства обратно в память хоста. Это как-то изменяет значение numBins, а следующий результат - 0. Это кажется очень странным. Я не вносил никаких конкретных изменений в numBins, но все равно меняет значение. Мне кажется, если я смогу это понять, я пойму, почему моя программа не работает.cudaMemcpy влияет на другие переменные

ответ

2

Это неправильно:

unsigned int* h_histogram; 
h_histogram = (unsigned int*) malloc(sizeof(unsigned int)* 1024); 

std::cout << numBins; 

checkCudaErrors(cudaMemcpy(&h_histogram, d_histogram, sizeof(unsigned int)* numBins, cudaMemcpyDeviceToHost)); 
         ^
          | 
          h_histogram is already a pointer 

Вместо этого:

checkCudaErrors(cudaMemcpy(h_histogram, d_histogram, sizeof(unsigned int)* numBins, cudaMemcpyDeviceToHost)); 

(единственное изменение в том, чтобы удалить амперсанд перед h_histogram

Я не уверен, что на самом деле, почему numBins был поврежден точно, но эта конкретная ошибка cudaMemcpy операция не будет копировать в пункт назначения, который вы ожидаете, вместо этого он закончил бы напишите значение указателя, сохраненное в h_histogram, а также все, что появилось после него. И если после него было сохранено numBins, оно также перезаписало бы это.

Смежные вопросы