You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单GPU线程执行向量加法为何比CPU快约370倍?

单GPU线程执行向量加法为何比CPU快约370倍?

嘿,这个问题的核心原因其实很简单——你的计时方式完全错了!

你可能没意识到,CUDA kernel是异步执行的:当你在CPU代码里调用vector_add_cuda<<<1, 1>>>(...)时,CPU只是把启动kernel的指令发给GPU,然后立刻继续执行后面的代码,根本不会等GPU完成整个向量加法的计算。所以你测出来的51300ns,其实只是GPU启动这个单线程kernel的开销时间,完全不是实际计算1000万次加法的耗时!

要得到真实的GPU计算时间,你需要在kernel启动后、结束计时前,加上一句cudaDeviceSynchronize(),强制CPU等待GPU完成所有任务:

auto start = std::chrono::high_resolution_clock::now();
vector_add_cuda<<<1, 1>>>(d_out, d_a, d_b, COUNT);
cudaDeviceSynchronize(); // 关键:等待GPU完成计算
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start).count();

加上这行之后,你再测就会发现,单GPU线程的耗时会和你预期的一样——比CPU单线程慢不少。

另外补充一点:即使修正计时后,GPU单线程的内存访问效率也可能和CPU有差异,但绝对不会出现370倍的差距,这个离谱的结果完全是异步执行导致的计时误差。

下次做CUDA性能测试时,一定要记得同步设备,不然测出来的时间毫无参考价值哦!

备注:内容来源于stack exchange,提问作者RD4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:43:10