2016年6月7日火曜日

TensorFlowソースコード読み会のメモ

# 5/21 ~ 22 ソースコード読み会
私たちの院にはソフトウェアシステム論という講義があります。
学生が読んでみたいソースコードを持ち合わせて、読んでいくという講義です。
今年はTensorFlowを読むことになりました。
以下、メモをカテゴリ別に"自分向けに"読みやすくしたものです。時系列順ではありません。だから言ってることほぼわかんないかも。

以下メモ

## C++ に関すること

* c++ raii
ポインタを宣言をしたところで、ポインタの解放の仕方を定義する
スマートポインタともいう。arcとも。

* <class T>
<typename T>と大差ない。

* thread pool
あらかじめスレッドを何個か作って、あとあと仕事を任せる。
仕事を任せるにはsynchronized queをつかう。

* auto
http://d.hatena.ne.jp/prettysoft/20101113/1418577983

* 引数に&が入り乱れるのはC++のだめなとこ?

* Copy()
 = 0を入れないとリンカが怒る
なぜ?

* C++は間違えるとぬるぽする

* 初期化する前の変数を代入するとぬるぽで即死

* ...ってなに?
可変長引数

* .*は何?
メンバへのポインタ演算子?

* _から始まる変数(あっとんさん)
C++ の場合は意味がない。強いて言うなら、自動生成されたコードの場合は、_をつけて変数の重複を防ぐ場合がある。
pythonには意味があって、インスタンスという意味がある。
obj-cにもまた意味がある。調べよう。

* Eigen
C++テンプレートで実装された線形代数ライブラリ

## Python に関すること

* p self.__dict__.keys()
でpythonのオブジェクトの中身を観れる
しかし、年に1回しか使わない?

## ソースコード読みに関すること

* factoryパターン
コンストラクタをそのまま使うのではなく、使うオブジェクトに頼んでもらう。
newの中になんでもしてはいけない。
C++ではその処理にチューリング不可能と書いている。
だから、オブジェクトに作らせたほうがいい。
積極的に使ったほうがいいパターンの一つ。

* return 0 or 1
古い。cobraからきてるはず。
関数の戻り値は複数戻してもいいはず。なぜならばレジスタは複数あるから。

* printfよりexitを
デバッグ時に追えなくなる可能性がある。

* メモリアロケーションチェックは無駄?

* 初期化は最初は読むのを飛ばす


## その他のこと

* SWIG
sinplifyd wrapper and interface generater
C/C++を他言語に接続するためのOCC。

* fortranとvector machine
なにか関係がある

* snprintf()を使え?
C99の定義らしい。なぜこれを使うのだろう?

* デバッガいじった
やらかした...
b : ブレークポイント設置
n : 一つの処理を進める (関数をスルー)
l : ソースを何行か読んでくる
l 数字 : 数字から読んでくる
l 関数 : 関数を読んでくる
p : 変数中表示
bt : バックトレース
up : 関数呼び出しに戻る
return : 帰る(Pdb)
s : 関数を見るn
blake list : ブレークポイントのリスト?
だいたいこんな感じか?もしかしたら間違ってるかも

* SWIGの定義ファイル
*.iにはいろいろ書いてある。

* rendez(vous)
出会う

* bariar?
スレッドが終わるまでまつ

* 309はlock
lockが抜けると、lはデストロイされる
lはスタックなので、デストラクタされる際にlock解除?

* ghcは歯が立たない
デバッガすら立ち上げられなかった

* lldb -p $pid
プロセスのデバッグができる。

* dst
destination

* cudaMemcpyAsync()
memcpy()でエラー?CUDAの中でだめなので、引数が間違ってる?
変数をGPUに送り込むところ。

* ExecutorState()
ワーカスレッド

* m_rightImpl.evalSubExprsIfNeeded()
supportしていなければ、folseを返す。
もしかしたら、folseを返せば上手くいく?

* LAUNCH_CUDA_KERNAL()
実際にGPU側で動く

* derived
派生

* rhs
right hand side

* async
ソフトでは計算が終わるのを待たずに、計算。
ハードの場合は、クロックに沿って計算する。

* ABCL
futer言語

* catastrophic error
破滅的エラー

* nvcc cccc.cc
コンパイルコマンド?

* cudafe
cudaコンパイラコマンド?

* vimでsyntaxを変えられる

* dirs コマンド

* 名前から機能がわかるのすごい
名前に努力があるの + 名前が何を意味するか推理できる

* ターミナル間の移り、ショートカットかっこいい
http://techacademy.jp/magazine/5155にある

* grep 探索するもの 探索範囲

* tensor flore
実はGPUのドライバだった。
機械学習用のライブラリってわけではない。
学習自体はsklearnがやっている。

* progressバーを廃止するとdown loadとinstallが3割増しで早くなる?

* bazel
ビルドツール
それにしてもビルドソフトって何が嬉しいんだろう。
規模が大きくなったコードにしか使わないイメージ。

* ゲーム専用マシンを買うとGPU機が買える?


メモ、以上です。

今後勉強したいことまとめ
・bazel ビルドツール(ビルドが簡単になるみたいなので)
・llvm デバッガ(挙動追跡する場面がいくらかありそうなので)
・Unix コマンド(特に検索系)
・python
・TensorFlow

多いな...。
Unixコマンドは即使うので、勉強しがいありますね。
pythonは今後必要になるかも。

0 件のコメント:

コメントを投稿