我希望在CUDA内核中使用系统函数(例如rand())。但是,最理想的情况是它仅在CPU上运行。我可以分离文件(.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内存中,这是一个额外的步骤。
rand
来获取随机数。 - Matthieu Brucher