見出し画像

「写経」で学ぶRust日記:その2

お疲れ様です。Y研究員です。プログラミングの勉強法である「写経」を研究しています。書籍「プログラミング言語Rust第2版」を読みながら「写経」しています。

Rustはイメージキャラクターがカニなので、またカニの写真です。K研究員からは「カーシニゼーション」という言葉を聞きました。カニ以外の甲殻類がカニ化する言葉です。初めて知りました。そして写真のタラバガニも実はヤドカリの仲間みたいです。左右非対称らしいです。


並列計算を「写経」した

第2章にはMandelbrotのサンプルプログラムがあります。GitHubには単純なマルチスレッドと、洗練されたクレート(Rayon)を使った例がありました。「写経」の次にやる「少し変えてみる」ついでに、スピードを計測してみました。結果は以下のとおりです。

同じ画像を5回作成して、平均時間をとりました

使ったCPUはi7のGen8で12コアです(古い!)。シングルスレッドから比べて10倍くらい早くなっています。コンパイルは最適化が全部入りのリリースモードです。デバッグモードに比べて10倍くらい早くなってました。

マルチスレッドのクレート

最初に紹介されたクレートはcrossbeamです(画像中はband)。最終的にはコードの見た目もシンプルで性能が良いrayonに落ち着きそうです。ネットワーク等でIOブロックがある場合はtokioというクレートも使えるみたいでした。しかし名前がいちいち面白いです。rayonは化学繊維で、tokioは雑多な東京のイメージでしょうか。

検索したら使い分けの記事を見つけました。crossbeamはスレッド間で通信する場合に有効と分かりました。情報源は最後にリンクしておきます。

終わりに

今回はスレッド間で通信が無いのでシンプルな例でした。気になるのはCUDAで書いたらどれくらい早いのか、です。あとはARMのクロスコンパイルも気になります。RaspberryPiで動かしたらまた記事にしたいと思います。

参考にした記事


無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。