2013-04-03 3 views
0

я хочу, чтобы заполнить свои массивы на стороне GPU:Cuda массив заполнение GPU

для того, чтобы сделать это:

Сначала я создал массивы для принимающей стороны и стороны устройства:

int *d_A = NULL; 
int *h_A = NULL; 

затем я выделить память для массива хоста:

h_A = (int *)malloc(numOfData*sizeof(int)); 

, а затем я выделить для массива устройств:

cudaMalloc((void **) &d_A, numOfData * sizeof(int)); 

, а затем я передать D_A на стороне GPU

cudaMemcpy(d_A, h_A, numOfData, cudaMemcpyHostToDevice); 

и вызов функции

generateVector<<<1,2>>>(d_A,numOfData); 

генерировать функции ниже:

_global__ void generateVector(int * d_Data,int count) { 

    for (int i = 0; i < count; i++) { 
     d_Data[i] = rand_from_0_to_100_gen(); 
    } 
} 

Я знаю стороне GPU теперь позволяет мне использовать функцию rand для заполнения моего массива. Что я могу сделать? Какое возможное решение?

+0

Здесь [пример] (http://stackoverflow.com/questions/15247522/cuda-random-number-generation/15252202#15252202), показывающий, как создавать случайные числа на графическом процессоре. Обратите внимание, что в этом конкретном случае каждый поток генерирует одну и ту же случайную последовательность, но это легко заменяется путем передачи другого семени, возможно, основанного на 'threadIdx.x' для каждого потока. –

+0

Также см. Http://stackoverflow.com/questions/11024718/can-thrust-generate-random-numbers-on-the-device – Steve

+0

Пожалуйста, отредактируйте существующий вопрос, а не добавьте новый. – ChrisF

ответ

0

Я считаю, что самым простым способом для вас было бы использовать библиотеку CURAND. Вы можете найти некоторые образцы в CUDA SDK - взгляните на Монте-Карло.

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