Искал использовать системные функции (такие как rand ()) в ядре CUDA.Тем не менее, в идеале это будет работать только на процессоре.Могу ли я разделять файлы (.cu и .c ++), все еще используя добавление матрицы gpu?Например, что-то вроде этого:
в main.cpp:
int main(){
std::vector<int> myVec;
srand(time(NULL));
for (int i = 0; i < 1024; i++){
myvec.push_back( rand()%26);
}
selfSquare(myVec, 1024);
}
и в cudaFuncs.cu:
__global__ void selfSquare_cu(int *arr, n){
int i = threadIdx.x;
if (i < n){
arr[i] = arr[i] * arr[i];
}
}
void selfSquare(std::vector<int> arr, int n){
int *cuArr;
cudaMallocManaged(&cuArr, n * sizeof(int));
for (int i = 0; i < n; i++){
cuArr[i] = arr[i];
}
selfSquare_cu<<1, n>>(cuArr, n);
}
Каковы лучшие практики в таких ситуациях?Было бы лучше использовать curand и писать все в ядре?Мне кажется, как в приведенном выше примере, есть дополнительный шаг в получении вектора и копировании его в общую память CUDA.