13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rust] 数値計算向け Cargo.toml の設定

Posted at

Cargo のデフォルトの設定は数値計算にはあまり向いていない部分があるため, Cargo.toml をどう設定するのが良いかまとめます. 他におすすめがあれば教えてください.

最適化を強制

Rust でガリガリ数値計算しようと思うときは比較的ハードな計算で Python じゃ遅すぎるということが多いと思います. そうするとたいていはデバッグ段階でもコンパイル時間よりも計算時間の方が長いので, 常に最適化をかけるべきでしょう.

Cargo.toml
[profile.dev]
opt-level = 3
overflow-checks = false

デフォルトはデバッグビルドが opt-level=0, リリースビルドが opt-level=3 です. オーバーフローのチェックは取り扱う問題に応じてオン/オフを設定すればよいと思いますが, 多くの場合, チェックしたいのなら明示的に checked_add などの関数を使用するべきだと思います.

LTO を有効化

LTO (link time optimizations) を有効にするとさらなる実行時速度の向上が期待できますが, デフォルトではオフになっています. 例えばリリースビルドのみ有効化する場合は次のように設定します.

Cargo.toml
[profile.release]
lto = true

デバッグ情報を残す

数値計算の場合, リリースビルドであったとしても問題が発生したら積極的にパニックさせることになります (変な状態のまま実行を続けられる方が迷惑). しかしデフォルトではリリースビルドではデバッグ情報が削除されてしまうため, 情報があまり出力されず不便です. デバッグ情報を保持するように設定します.

Cargo.toml
[profile.release]
debug = true

まとめ

Cargo.toml
[profile.dev]
opt-level = 3
overflow-checks = false

[profile.release]
debug = true
lto = true

[profile.test]
opt-level = 3
13
11
0

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
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?