Pytorch拓展C++和CUDA:讲解和细节

Pytorch拓展C++ 以及 CUDA

本文不给出一个完全可以运行的完整实例,更重要的讲解如何写以及一些细节。其他博客讲解的官网上的lltm的实例这里并没有,并且最好看过lltm的代码和博客,这样效果更佳。各位看官根据需求选择看或不看。

文件结构和运行方式

#method 1
code/
    test.cpp
    test.cu
    setup.py
    test.py
    callandrun.py
#method 2
code/
    test.cpp
    test.cu
setup.py
test.py
callandrun.py

首先新建一个目录(被很多文章误导,其实这个目录可以随便在一个地方建),目录里包含四个文件
test.cpp文件是起到了连接cuda代码和python代码的作用,cuda代码起到了核心的并行加速的作用,使用setup.py来将其编译生成一个python可以直接import的模块,但是它不能直接见人,需要使用test.py将这个模块封装起来。最后在callandrun.py里调用运行。

test.cpp 和test.cu

这两个文件是核心,其中用到了cuda编程基础,pytorch的C++接口,关键的就是ATen库
ATen库里关于at::Tensor的属性和用法,在这个Tensor类属性 链接里,很重要的一个就是at命名空间的用法,在这里 at命名空间
这里给出.slice的用法,其他属性都可以在文档里找到

Tensor slice(int64_t dim = 0, int64_t start = 0, int64_t end = 9223372036854775807, int64_t step = 1) const

torch::Tensor 和at::Tensor其实是一样的,下面给出几个用到的语法规则

//连接两个tensor生成一个新的tensor,重点是两者必须在同一个设备上,同为GPU或者同为CPU
auto/at::Tensor a = at::cat({
   
   tensor1,tensor2},dim);

//生成0 tensor
//根据我的经验 设备是需要指定的 其他人的博客没有写,可能和环境或者cuda的版本或者我写代码的方式有关系
auto/at::Tensor a = at::zeros({
   
   shape1,shape2,...}/*,at::kCUDA*/
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值