云南住房和城乡建设厅网站首页,佛山网站建设的公司,室内设计效果图怎么做,如何设计校园网站写一个简单CUDA demo的尝试1
功能
对于一维tensor a, b#xff0c;实现实现a[i]b[i]。
参考: https://zhuanlan.zhihu.com/p/595851188
需要的代码文件
test.py: 测试文件 AddMlp/: 算子仓库
add_mlp_cuda.cu: 算子核心操作#xff0c;包括一个cuda计算kernel和一个lau…写一个简单CUDA demo的尝试1
功能
对于一维tensor a, b实现实现a[i]b[i]。
参考: https://zhuanlan.zhihu.com/p/595851188
需要的代码文件
test.py: 测试文件 AddMlp/: 算子仓库
add_mlp_cuda.cu: 算子核心操作包括一个cuda计算kernel和一个launcher来启动cuda kernel的并行计算add_mlp.cpp: laucher的函数声明对封装.cuda中的算子并为python提供调用的方法接口如forward函数setup.py: 封装.cu和.cpp为python提供调用接口的算子实例/类addMlp.py: 在python端调用C接口并封装、并实现backward方法init.py: addMlp.py的init文件
封装/调用链条
.cu里面的add_mlp_kernel - .cu里面的add_mlp_kernel - .cpp 里面的add_mlp_launcher定义及add_mlp_gpu并绑定forward方法-setup.py绑定.cu和.cpp-addMlp.py中AddMLP类调用add_mlp.forward并绑定为add_mlp_op-init.py绑定-test.py调用add_mlp_op
打包与安装
因为cuda cpp的code和python是靠setup.py连接起来的所以必须要用pip install .安装后才能使用。值得注意的是setup.py里的name只是包名(例如scikit-learn)import的时候是import带有__init__.py的那个folder的名字比如这里就是from AddMlp import add_mlp_op.
backward
cuda backward的输入是上一步的gradient这一步的gradient怎么求是要自己推好了写在backward函数里的比如是常数那就直接返回常数。
代码
https://github.com/JiuTongBro/CudaDemo1