FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「実践Rust入門」に入門している

少し前から、「実践Rust入門」を読み始めている。Rust自体は前に触ったことがあるのだが、ジェネリクスとかトレイトとか、基本的な知識が不足しているので、評判が良さそうな本を購入して読み進めていくことにした。

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

まずは、クイックツアーということでバイトニックソートの実装を追いかけていくことにした。バイトニックソートを機能を追加しながら順番に実装していくのでわかりやすい。

  1. 単純な整数のみでバイトニックソートを実装
  2. 順序付け可能な型に限定してバイトニックソートを拡張 (浮動小数点などはNaNが入るため対象外)
  3. 一般的な型(Structなど)に拡張してバイトニックソートを拡張(クロージャを活用する)
  4. 並列化ライブラリを使用してマルチコアでバイトニックソートを実装する

という流れになっており、少しずつ進めていくことで私でもなんとか最後のバイトニックソートのベンチマークまで動かすことができた。

本文自体にいくつか間違いがあるようで、サポートページの正誤表は確認する必要がある。私も「あれ、コンパイルできねえなあ。。」と何回か立ち止まってしまった。

gihyo.jp

最後のベンチマークプログラムでは私の環境(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にも上がっていた。

github.com

でもここから先、第4章から第8章まで適当に読んで実践編に入っちゃダメかな... やはり理解できないかな...