为什么我的GPU使用CUDA Thrust获得比旧GPU更低的性能?

时间:2018-01-23 07:45:40

标签: cuda thrust

我是CUDA的初学者,最近我正在通过本书 CUDA编程开发人员使用GPU并行计算指南了解CUDA库。当我得到Thrust Timing Sort部分时,我尝试了关于使用Thrust::sort()的示例。该示例通过GTX 470对16MB数据进行排序,在GPU排序上消耗58ms,在CPU上消耗2398ms。但是我的GTX1060和我的CPU上的1900ms只有290ms,同时按相同的功能排序16MB数据,我检查任务管理器发现在运行我的程序时,我的GPU利用率只有2%-3%和CPU利用率百分比左右30%。我想知道为什么我用更好的设备以相同的例子获得更低的性能?

1 个答案:

答案 0 :(得分:-1)

没有看到你的代码就很难分辨。

您确定它是执行时间而不是初始化或记忆复印时间吗? 你确定16MB大到足以保证在GPU上排序吗?

当计时代码执行cudaDeviceSynchronize()作为我的代码的第一行时,我通常会这样做。这样,所有GPU初始化都很早就完成了,并没有考虑到计时。

之后,我尝试将数据大小增加到128MB,以便进行大约1秒的计算。众所周知,GPU对小数据有效。现代GPU通常需要比他们的老兄弟更大的数据才能完全饱和。

编辑:关于stackoverflow的相关问题还建议在排序后放置cudaDeviceSynchronize(),以确保排序完成。我不确定是否需要,但也值得测试。