「写経」で学ぶRust日記:その2
お疲れ様です。Y研究員です。プログラミングの勉強法である「写経」を研究しています。書籍「プログラミング言語Rust第2版」を読みながら「写経」しています。
Rustはイメージキャラクターがカニなので、またカニの写真です。K研究員からは「カーシニゼーション」という言葉を聞きました。カニ以外の甲殻類がカニ化する言葉です。初めて知りました。そして写真のタラバガニも実はヤドカリの仲間みたいです。左右非対称らしいです。
並列計算を「写経」した
第2章にはMandelbrotのサンプルプログラムがあります。GitHubには単純なマルチスレッドと、洗練されたクレート(Rayon)を使った例がありました。「写経」の次にやる「少し変えてみる」ついでに、スピードを計測してみました。結果は以下のとおりです。
使ったCPUはi7のGen8で12コアです(古い!)。シングルスレッドから比べて10倍くらい早くなっています。コンパイルは最適化が全部入りのリリースモードです。デバッグモードに比べて10倍くらい早くなってました。
マルチスレッドのクレート
最初に紹介されたクレートはcrossbeamです(画像中はband)。最終的にはコードの見た目もシンプルで性能が良いrayonに落ち着きそうです。ネットワーク等でIOブロックがある場合はtokioというクレートも使えるみたいでした。しかし名前がいちいち面白いです。rayonは化学繊維で、tokioは雑多な東京のイメージでしょうか。
検索したら使い分けの記事を見つけました。crossbeamはスレッド間で通信する場合に有効と分かりました。情報源は最後にリンクしておきます。
終わりに
今回はスレッド間で通信が無いのでシンプルな例でした。気になるのはCUDAで書いたらどれくらい早いのか、です。あとはARMのクロスコンパイルも気になります。RaspberryPiで動かしたらまた記事にしたいと思います。