【发布时间】:2012-06-17 09:33:15
【问题描述】:
大家好,我目前正在为我的一些 CUDA 代码计时。我能够使用事件为他们计时。我的内核运行了 19 毫秒。不知何故,我觉得这很可疑,因为当我运行它的顺序实现时,它大约是 5000 毫秒。我知道代码应该运行得更快,但它应该这么快吗?
我正在使用包装函数在我的 cpp 程序中调用 cuda 内核。我应该在那里或在 .cu 文件中调用它们吗?谢谢!
【问题讨论】:
-
CUDA 的 100 倍加速并不令人惊讶。但是你应该发布一些代码,这样我们就可以看到你在做什么!
-
你使用过流吗?您是否在内核调用之后和时间测量之前添加了
cudaDeviceSynchronize(),以防默认流使用? -
由于 OP 正在使用事件,因此 OP 应该使用 cudaEventSynchronize(),而不是 cudaDeviceSynchronize()(后者会起作用,但对于计时来说有点重锤......)。跨度>
-
如何从 .cpp 文件中调用 cuda 内核?如果您没有使用 >>、CUDA 驱动程序 API 或 cudaLaunch(),那么您没有在设备上启动内核。发布一些示例代码将帮助我们回答。
-
另一个需要解决的问题是您如何测量顺序版本的时间?一些不公平的比较从控制台测量顺序代码的全部时间,包括
malloc和free的时间,更糟糕的是,从文件中读取输入数据的时间。因此,与 CUDA 内核(不包括cudaMalloc、cudaFree甚至从 CPU--GPU 传输数据)相比,可以带来令人印象深刻的加速。
标签: cuda