pytorch下的lib库 源码阅读笔记(2)
2017年11月22日00:25:54
对lib下面的TH的大致结构基本上理解了,我阅读pytorch底层代码的目的是为了知道
python层面那个_C模块是个什么东西,底层完全黑箱的话对于理解pytorch的优缺点太欠缺了。
看到 TH 的 Tensor 结构体定义中offset等变量时不甚理解,然后搜到个大牛的博客,下面是第一篇:
快速浏览了一下这个系列,看的压力山大。。。
大致理解是offset是为了让Tensor在内存中线性化存储,计算和传输成本低。又猛然搜到python层面对
Tensor的文档。原来底层的函数在python层面都有一定的体现。看pytorch的文档就够了。
TH在编译完后相关头文件和TH.so已经放到系统路径中了,后面的库都可以直接调用TH。
跳过THS,看了下THNN,文件结构是并列的。主要是TH_TENSOR_APPLY宏函数比较有意思。出现在
THTensor相关文件中,被THNN大量运用。研究下应该也是不难理解的。
gpu版本的THC,THCS,THCNN都一概跳过,没学过cuda,掌握了cuda的语法,结合TH的经验,看懂这几个
应该不难,nccl跳过。搞完python源码剖析后再拿出些时间来学cuda。
THPP值得研究,用C++封装C。
2017年11月24日21:27:06
这两天看完了vamei的 linux系列,接着又快速扫了一遍 python源码剖析 ,有vamei的博客在前,
看 python源码剖析 基本上无痛苦。剖析这本书以后肯定还是要反复阅读的。
另外有一篇不错的博客: pytorch源码:C扩展 顺腾摸瓜可以找到其他几篇重要的博客。
2017年11月28日00:13:00
接下来的几天会试图完成一个有点复杂的自定义的C++或者C的矩阵类,并且带几个矩阵运算,将这个
矩阵类注册到python中,让其表现和python自带的数据类型有差不多的表现。比如可继承。
搜到一个有点意思的博客:
http://www.xefan.com/categories/Python%E6%A0%8F%E7%9B%AE/
pytorch的大体结构差不多是TH、THNN、ATen干具体的计算的活,THPP封装一下。
然后csrc把相关类型注册到python中,让其在python中被无缝调用。
pytorch中python层面的Variable和Function类都定义在csrc的autograd中。看README
有一些简单的介绍。vscode打开torch源码后搜PyTypeObject可以看到有哪些类型被注册到python中了。
THPP和ATen还没看。看ATen还需要点自动微分方面的知识,虽然之前关注过这个问题。
2017 1201 0135
ATen应该从 code_template.py 那个文件开始看,然后用vscode在ATen文件夹下搜 .substitute
醉了,写pytorch的小组怎么这么爱用类似宏替换的东西。
在C层面搞了宏替换,还要用python再玩一次!
为了不用C++写底层,真是独树一帜!
2017年12月18日21:22:36
https://github.com/necroen/tiny_lib
pytorch下的lib库 源码阅读笔记(2)的更多相关文章
- pytorch下的lib库 源码阅读笔记(1)
置顶:将pytorch clone到本地,查看initial commit,已经是麻雀虽小五脏俱全了,非常适合作为学习模板. 2017年12月7日01:24:15 2017-10-25 17:51 参 ...
- 源码阅读笔记 - 1 MSVC2015中的std::sort
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...
- libevent源码阅读笔记(一):libevent对epoll的封装
title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 h ...
- guavacache源码阅读笔记
guavacache源码阅读笔记 官方文档: https://github.com/google/guava/wiki/CachesExplained 中文版: https://www.jianshu ...
- JDK1.8源码阅读笔记(1)Object类
JDK1.8源码阅读笔记(1)Object类 Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...
- mxnet源码阅读笔记之include
写在前面 mxnet代码的规范性比Caffe2要好,看起来核心代码量也小很多,但由于对dmlc其它库的依赖太强,代码的独立性并不好.依赖的第三方库包括: cub dlpack dmlc-core go ...
- CI框架源码阅读笔记5 基准测试 BenchMark.php
上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
随机推荐
- mongoengine 分页 切片与 skip + limit 的区别
首先要了解切片与 skip 的原理 切片原理是将 index(索引) 或 cursor(游标)移动到 start 位置再 进行切分: skip原理是跳过start条数据后再获取 1. 单纯的普通分页用 ...
- 两个非空的<div>元素inline-block化后出现空白部分解决办法
在涉及到两个<div>元素并列显示的效果时,一般有两种方法: 1.使用float元素让元素并联显示: 2.将块状的<div>元素display设置为inline-block,使 ...
- FileReader字符的读出
1.fileReader是字符的读出,只能读文件. 2.在读取文件的之前,该文件必须存在. 3.int reader();一次读取一个字符,返回的该字符的码值,如果想要返回字符,直接进行强转char ...
- python 二分法模板——牢记
class Solution: # @param nums: The integer array # @param target: Target number to find # @return th ...
- day32-python阶段性复习六
面向对象编程的一种方法一些皆对象面向过程和面向对象编程面向过程编程:函数式编程.c等面向对象编程:c++ ,java,python等看具体问题用哪种方法 类和对象:是面向对象中的两个重要的概念类:是对 ...
- python全栈开发笔记---------数据类型-----集合set
定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key 1.不同元素组成 2.无序 3.集合中元素必须是不可变类型(数字,字符串,元组) 特性:集合的目的是讲不同的值放到 ...
- Problem F: 平面上的点——Point类 (VI)
Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个“Point类”来实现平面上的点的操作. 根据“append.cc”,完成Point类的构造方 ...
- Java语法基础学习DayNineteen(反射机制)
一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...
- JavaScript之Math
1. Math Math是js的内置函数,无需创建,把Math作为对象使用就可以调用其属性和方法. 2.Date 2.1 日期对象创建 var now = new Date ( ); 含参数时表 ...
- BootstrapValidator . select 必须选择一个 .callback . select .option
1.对于: 如果 只是引用 notEmpty , 不起作用. 因为 请选择教师 也是一个 option , 一个选项. 可以使用 callback. 'userId':{ message :'教 ...