Nvidia GPU数组加法性能偏低及CUDA计算能力要求相关问题咨询
问题解答
问题1:示例代码中@jit装饰的函数运行耗时远高于CPU的成因
- 首先你对numba装饰器的使用存在错误:仅使用
@jit装饰器默认编译的是CPU版本函数,根本没有调用GPU进行计算,你代码里的Add_GPU命名不符合实际运行逻辑。 - 计时包含了编译开销:numba的
@jit采用懒编译机制,第一次调用函数时才会执行编译流程,你统计的0.38s耗时中95%以上是即时编译的时间,不是实际计算耗时。你可以在计时前先调用一次Add_GPU触发编译,再运行就能看到计算耗时远低于这个数值。 - 额外补充:即使你正确配置了GPU计算逻辑,这种简单的向量加法场景也不适合用GPU:GPU计算需要先把数据从内存拷贝到显存、计算完成后再拷回内存,这个IO开销远大于该场景下的计算收益,对比CPU直接在内存中调用高度优化的numpy向量加法,肯定会更慢。GPU仅适合计算密集型、数据复用率高的任务。
问题2:使用@vectorize(['float32(float32, float32)'], target='cuda')报错要求compute-level=3.5的原因
你的GTX760显卡计算能力为3.0,不符合当前版本numba CUDA后端的最低要求:
- NVIDIA官方从CUDA 11.0版本开始,已经彻底移除了对计算能力3.0及以下Kepler架构显卡的支持,新版本CUDA工具链不再提供3.0架构的编译目标。
- 新版numba的CUDA后端最低要求计算能力3.5,3.0架构缺少动态并行、统一内存寻址等通用计算依赖的指令集特性,无法支持新版numba的CUDA运行逻辑。如果要适配你的显卡,只能降级使用CUDA 10.2 + 旧版numba。
问题3:常见Python GPU开发框架的CUDA计算能力要求对照表
- Numba CUDA后端:0.57及以上版本最低要求计算能力3.5,0.54及更早版本最低支持3.0
- PyTorch:1.6及以上官方预编译包最低要求3.5,2.0及以上版本最低要求3.7,当前最新源码编译版本最低要求5.2
- TensorFlow:2.0及以上官方预编译包最低要求3.5,2.5及以上版本最低要求3.7,当前最新版本已不再支持所有3.x计算能力的显卡
- CUDA工具包:10.2是最后一个支持计算能力3.0的版本,11.x系列最低支持3.5,12.x系列最低要求5.2
内容的提问来源于stack exchange,提问作者user2585330
相关产品推荐
相关产品推荐

