我是Cuda的初学者,我只想问一个简单的问题,但我找不到任何明确的答案。
我知道我们可以使用一个原始指针在设备内存中定义我们的数组:
int *raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
而且,我们还可以使用Thrust定义一个向量,并推送我们的项目:
thrust::device_vector<int> D;
实际上,我需要大量的内存(比如500M的int变量(来并行应用太多的内核。就内核访问内存而言,(何时(使用原始指针是否比Thrust::vector更快?
thrust::device_vector
中的数据是普通全局内存,访问速度没有差异。
但是请注意,您提出的两个备选方案并不等同。cudaMalloc返回未初始化的内存。thrust::device_vector
中的内存将被初始化。分配后,它启动一个内核来初始化其元素,然后是cudaDeviceSynchronize
。这可能会减慢代码的速度。您需要对代码进行基准测试。