2013-12-08 2 views
0

Я пытаюсь отладить мой код cuda, и я смущен о том, как получить cudaMemset для правильной работы. Ниже приведена прослушиваемая часть.cudaMemset не удалось установить все значения 0

unsigned int * h_histogram; 
checkCudaErrors(cudaMallocHost((void **)&h_histogram,sizeof(unsigned int)*numBins)); 
checkCudaErrors(cudaMemset(h_histogram, 0, numBins)); 
std::cout << "Num Bins = " << numBins << std::endl; 
for (size_t i = 0; i < numBins; ++i) 
{ 
printf("%u %u %u\n", i, h_histogram[i]);} 

В этом коде numBins = 1024. Однако, когда я распечатал его, только первые 256 значений массива h_histogram установлены равными 0, остальная часть установлена ​​в кучу случайных чисел. Пожалуйста, помогите мне исправить это.

ответ

2

Параметр thrid cudaMemset ist размер в байтах, этот shoulb устанавливается с заданным значением. Вы вводите только количество элементов. Вы должны изменить его на это, как вы делали с cudaMallocHost прямо перед этим.

checkCudaErrors(cudaMemset(h_histogram, 0, numBins*sizeof(unsigned int)); 
+0

Отлично, что работает. У вас есть идея, почему разработчик сказал, что третий параметр должен быть size_t? Как в этой ссылке http://www.cs.rit.edu/~ark/cuda/doc/html/group__CUDART__MEMORY_ge07c97b96efd09abaeb3ca3b5f8da4ee.html –

+2

@beginner: 'size_t' не« размер типа », а« тип размера »- a тип, предназначенный для хранения размера чего-либо. В этом случае это «что-то» - это количество байтов. –

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