修士・博士課程時代
-
- 流体の直接数値計算
-
- C++でシミュレーションを実装
-
- Pythonで可視化+統計量の解析(on Jupyter)
- データはmsgpackで保存
データ同化の研究を始める
-
- 既存のコードベースを廃棄
-
- Pythonで実装を始める
NumPy/SciPy使用
Python遅い(´・ω・`)
-
- Pythonでは関数の呼び出しがインライン展開できない
-
- 汎用性高く実装できない
-
- でも、もうC++は書きたくない
コンパイルに1分かかるのはちょっと・・・
何で書く?
-
- Haskellで書いてみた
ものすごく遅いコードが出来上がった(涙)
配列を部分的に書き換えていくコードが書きづらい
コンパイル遅い
GoかRustか
Goが流行ってるのでRustにした
Rustを覚える
-
- C++の不満点が解消されている
ビルドシステム(cargo)
moveが自然に導入
template -> traits (concepts)
iterator周りの機能が豊富
itertoolsでさらに拡張
所有権はC++より簡単
ライフタイムはコンパイラが教えてくれる
Rustで実装開始
-
- 線形代数ライブラリの選択(参考:Linear Algebra in Rust)
rusty-machine (rulinalg): Machine Learning library for Rust
ndarray : Arrays inspired by numpy.
nalgebra : Low dimensional linear algebra.
servo/euclid : Basic linear algebra used by Servo.
cgmath : Linear algebra for game development.
一番単純そうなndarrayを選択
純粋な線形演算ライブラリで、低次元に特化していない
もともとC++で実装してい自作ライブラリに似てた(Eigenは使っていなかった)
LAPACK相当の機能がndarrayにない
ndarray-linalgを開発
LAPACKを共有ライブラリとしてリンク(lapack crateを使用)
Rustによる数値計算: 線形代数編
同時期に同じ目的の別crate linxalも開発される
FFTできない
rust-fftw3を開発
Cのバインディングの作成を覚えた
現状の課題
-
- データの管理
現状msgpackに保存しているがMongoDBに保存したい
dieselで簡単にSQLサーバーに保存できるかも?
並列化・大規模化
数値計算はデータ並列なのでRayonが有効
データ並列ライブラリRayonを使ってみた
MPI並列の例がない(?)
PythonからRustの関数を呼べるようにしたい
呼ぶだけならできる:rust-cpython
NumPy C APIも併せてrust-ndarrayとシームレスに連携したい