# 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は今後必要になるかも。