У меня есть следующая простая программа для тестирования cudaMemset
cudaMemset не кажется, чтобы установить требуемое значение
#include <iostream>
#include <cuda.h>
using namespace std;
__global__ void kernel(int *input){
input[threadIdx.x] += threadIdx.x;
}
int main() {
size_t size = 5;
int *h_ptr, *d_ptr;
h_ptr = new int[size];
cudaMalloc((void **)&d_ptr, sizeof(int) * size);
cudaMemset(d_ptr, 10, sizeof(int) * size);
kernel<<<1, size>>>(d_ptr);
cudaDeviceSynchronize();
cudaMemcpy(h_ptr, d_ptr, sizeof(int)*size, cudaMemcpyDeviceToHost);
for(int i = 0; i < size; i++)
cout<<h_ptr[i]<<" ";
cout<<endl;
return 0;
}
Я ожидал, что результат будет [10 11 12 13 14]
вместо этого я получаю значение мусора.
Что мне не хватает?
Спасибо!
написать ядро, которое inizializes вашего массива :) – DRC
Да, ядро инициализации требуется в данном случае. – sgarizvi
См. Также [memset integer array?] (Http://stackoverflow.com/questions/7202411/memset-integer-array) и [cudaMemset() использование] (http://stackoverflow.com/questions/13387101/cudamemset- Применение). – JackOLantern