Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目总结

该项目是 python 调用 cuda 接口的 demo。

技术栈:

项目动机

在 pytorch 中,虽然有很多算子,但是可能性能较差,所以需要 cuda 写的算子,然后 python 调用。

参考

使用pybind11为cuda c++代码开发python调用接口 - 许士芳的文章 - 知乎 https://zhuanlan.zhihu.com/p/1915115953122961094

踩坑记录

坑 1:CUDA 架构不匹配导致输出全为 0

现象: python_test.py 输出 [0. 0. 0.],没有任何报错。

原因: CMakeLists.txt 中设置了 CMAKE_CUDA_ARCHITECTURES 90(对应 Hopper 架构,sm_90),但实际 GPU 是 RTX 3060 Ti(Ampere 架构,sm_86)。CUDA kernel 被编译为 sm_90 的二进制代码,在 sm_86 的 GPU 上无法启动,但 vector_add.cu 中没有做任何 CUDA 错误检查,导致 kernel 启动失败被静默忽略。cudaMemcpy 也跟着失败,输出数组保持未初始化的默认值(全 0)。

修复:

  1. CMAKE_CUDA_ARCHITECTURES 改为与实际 GPU 匹配的值(例如 RTX 3060 Ti 对应 86):
    set(CMAKE_CUDA_ARCHITECTURES 86)
  2. vector_add.cu 中添加 CUDA_CHECK 宏,对每次 CUDA API 调用和 kernel 启动都做错误检查,让问题能第一时间抛异常而不是静默失败:
    #define CUDA_CHECK(err) do { ... } while (0)
    // kernel 启动后必须检查:
    CUDA_CHECK(cudaGetLastError());
    CUDA_CHECK(cudaDeviceSynchronize());

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages