我想在GPU上填充陣列。爲了做到這一點,我寫generateVetor功能在GPU上填充陣列
int rand_from_0_to_100_gen(void) {
return rand() % 100;
}
__device__ void generateVector(int * hData,int count) {
for (int i = 0; i < count; i++) {
hData[i] = rand_from_0_to_100_gen();
}
}
在主我動態分配內存數組A
int *A = NULL;
err = cudaMalloc((void **) &A, numOfData);
generateVector(A,numOfData);
但功能給出了錯誤:從設備調用主機功能是不允許。爲什麼?我得到這個錯誤?
的問題是:我不想從主機設備複製。我直接在GPU上填充我的陣列。我必須從CPU複製嗎?這是限制嗎? – user2240256
您無法直接從主機代碼寫入GPU(設備)內存。您必須使用類似'cudaMemcpy'或'cudaMemset'的API調用。或者,你可以從GPU端啓動一個內核,並讓它做任何你想做的事情。但是你發佈的代碼是主機代碼(主要是),並且不包含任何內核啓動。 –