少し前から、「実践Rust入門」を読み始めている。Rust自体は前に触ったことがあるのだが、ジェネリクスとかトレイトとか、基本的な知識が不足しているので、評判が良さそうな本を購入して読み進めていくことにした。
- 作者: κeen,河野達也,小松礼人
- 出版社/メーカー: 技術評論社
- 発売日: 2019/05/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
まずは、クイックツアーということでバイトニックソートの実装を追いかけていくことにした。バイトニックソートを機能を追加しながら順番に実装していくのでわかりやすい。
- 単純な整数のみでバイトニックソートを実装
- 順序付け可能な型に限定してバイトニックソートを拡張 (浮動小数点などはNaNが入るため対象外)
- 一般的な型(Structなど)に拡張してバイトニックソートを拡張(クロージャを活用する)
- 並列化ライブラリを使用してマルチコアでバイトニックソートを実装する
という流れになっており、少しずつ進めていくことで私でもなんとか最後のバイトニックソートのベンチマークまで動かすことができた。
本文自体にいくつか間違いがあるようで、サポートページの正誤表は確認する必要がある。私も「あれ、コンパイルできねえなあ。。」と何回か立ち止まってしまった。
最後のベンチマークプログラムでは私の環境(4コア8スレッド)で2の28乗の整数をソートして性能差は約2.5倍程度であった。
sorting 268435456 integers (1024.0 MB) cpu info: 4 physical cores, 8 logical cores seq_sort: sorted 268435456 integers in 167.6089117 seconds par_sort: sorted 268435456 integers in 68.1228797 seconds speed up: 2.46x
PDFにソースコードが載っているのでコピーしようとしたらコピー禁止?が掛かっていたのでひたすら写経していたのだが、GitHubにも上がっていた。
でもここから先、第4章から第8章まで適当に読んで実践編に入っちゃダメかな... やはり理解できないかな...