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