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