LoginSignup
28

More than 5 years have passed since last update.

Rustで数値計算してみた話

Last updated at Posted at 2017-03-17
1 / 8

修士・博士課程時代

  • 流体の直接数値計算
  • 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周りの機能が豊富
  • 所有権は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にない

FFTできない

  • rust-fftw3を開発
  • Cのバインディングの作成を覚えた

現状の課題

  • データの管理
    • 現状msgpackに保存しているがMongoDBに保存したい
    • dieselで簡単にSQLサーバーに保存できるかも?
  • 並列化・大規模化
  • PythonからRustの関数を呼べるようにしたい

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28