# CUDA新手入门代码

By [distracting-thoughts](https://paragraph.com/@distracting-thoughts) · 2023-07-10

---

我又又去捡垃圾回来了

在用PyTorch或者TensorFlow搭积木的时候，你是不是也遇到过下面这些情况：

*   自带的算子及其组合都无法满足你超（bian）常（tai）的计算需求。
    
*   自带的算子不可导，需要自己定义反向传播的梯度，例如argmax。
    
*   自带的算子太慢了，严重影响了你发paper的速度。
    

这时候你就会想，要是能自己实现一个速度又快、又能满足需求的算子就好了。

你想到了CUDA，自己写一个CUDA算子不就完事了嘛！

然后问题又来了，写是写完了，怎么用python代码调用它呢？

还有一个问题，这个算子它没梯度啊，自动求导机制不顶用了！

你去网上各种搜索，方法倒是全有，但是源码都好复杂，你一个新手怎么可能有心思看完那么复杂的教程？

这时候，你突然看到了这篇文章，看完后你惊呼：“怎么会有这么简洁的示例代码，这就是我想要的！”

没错，这就是我熬了好几个通宵，查了无数bug后，写出来的一份示例代码。

话不多说，先上源码好吧：

[**Neural Network CUDA Example**​github.com/godweiyang/NN-CUDA-Example](https://link.zhihu.com/?target=https%3A//github.com/godweiyang/NN-CUDA-Example)

我给它命名为“Neural Network CUDA Example”，简称“NN CUDA Example”，意思就是神经网络调用CUDA的示例。

那么这玩意到底有啥用呢？目前为止，它可以让你学到下面这些东西：

*   最简单的CUDA算子的写法。
    
*   最简洁的PyTorch和TensorFlow封装CUDA算子的方法。
    
*   几种编译CUDA算子的方法。
    
*   python调用CUDA算子的几种方式。
    
*   python中统计CUDA算子运行时间的正确方法。
    
*   PyTorch和TensorFlow自定义算子梯度的方法。
    

你直呼内行，要是早点能看到这篇文章，能多发好几篇论文啊。

看完代码，有些细节你还是懵逼了，这这这都是啥意思啊，为啥这么写啊？

这时候你又看到了几篇教程，哦原来都有讲解，那没事了。

[**godweiyang：PyTorch自定义CUDA算子教程与运行时间分析**193 赞同 · 23 评论文章](https://zhuanlan.zhihu.com/p/358220419)

[**godweiyang：详解PyTorch编译并调用自定义CUDA算子的三种方式**174 赞同 · 18 评论文章](https://zhuanlan.zhihu.com/p/358778742)

[**godweiyang：三分钟教你如何PyTorch自定义反向传播**123 赞同 · 8 评论文章](https://zhuanlan.zhihu.com/p/359524837)

从那以后，你代码能力飞速提升，一连发了好几篇顶会。

然后你顺手一键三连，把这篇文章转给了身边有需要的人，个个都夸你发现了宝藏。

[https://zhuanlan.zhihu.com/p/360441891](https://zhuanlan.zhihu.com/p/360441891)

---

*Originally published on [distracting-thoughts](https://paragraph.com/@distracting-thoughts/cuda)*
