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