哪一个更快?原始指针与推力矢量



我是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。这可能会减慢代码的速度。您需要对代码进行基准测试。

最新更新