cellutils で性能評価 take.1
実機 (PS3) も入手でき、PS3 用 Linux (FC5) のインストールも完了という ことで、今回はバスの性能を測ってみようと思います。誰かもう作っているだろ うということで情報収集したところ、やっぱりありました。
試してみたのは rev:68 です。見てみると他にもいろいろなツールが入って いるのですが、基本的に IBM blade 等の 8 つの SPE が使用できる環境を前提に しているようで、 PS3 では 6 SPE なのでそのままでは使えません。ということ で、今回は bandwidth という RAM-LS 間の転送性能を測定するソフトに修正を加 えて、PS3 用に SPE 数が 1-6 まで使用 (-n) できるようにして、ついでにget、 put の選択機能 (-d) と転送に使用するファイルの領域を制限する機能(-f) をつ けてデータを取ってみました。
実際に試してみたい方は cellutils を co して以下の patch を適用し、 bandwidth を make してください。
patch-cellutils-r68-0.1bandwidth 概要
- 16MB のファイルを作成し、RAM -> LS (get)、LS -> RAM (put) を行う。 よって転送するデータのサイズは 32MB。
- 使用する SPE 数によって上記のファイルを等分割して各 SPE が転送。よっ て SPE の数を増やしても転送するデータサイズは変わらない。
- 上記の転送にどれだけ時間がかかるかを PPE 側で gettimeofday() で測定。 (測定結果は結構ばらつきがあります)
- SPE 数が 1, 2, 4 以外だとバグるので 1-6 でいけるように修正。
- get だけ、put だけができるように機能拡張 (-d)。この場合のデータサイズは 16MB。
- TLB の影響を見るために、各 SPE がファイルの分担部分の先頭 32KB のみ を繰り返し転送できるよう機能拡張 (-f)。
- なお、上記拡張機能を使用した場合はデータの verify (-v) は正しく動作 しません。
実行結果
$ ./main -n ? -d 3
| SPE num | direction | file range | bandwidth (GB) |
| 1 | get,put | 16MB | 13.543665 |
| 2 | get,put | 16MB | 18.396072 |
| 3 | get,put | 16MB | 18.792736 |
| 4 | get,put | 16MB | 18.824366 |
| 5 | get,put | 16MB | 18.824366 |
| 6 | get,put | 16MB | 18.882629 |
$ ./main -n ? -d 1
| SPE num | direction | file range | bandwidth (GB) |
| 1 | get | 16MB | 10.198916 |
| 2 | get | 16MB | 17.331835 |
| 3 | get | 16MB | 19.633957 |
| 4 | get | 16MB | 20.397833 |
| 5 | get | 16MB | 20.397833 |
| 6 | get | 16MB | 20.373062 |
$ ./main -n ? -d 2
| SPE num | direction | file range | bandwidth (GB) |
| 1 | put | 16MB | 15.258950 |
| 2 | put | 16MB | 19.668484 |
| 3 | put | 16MB | 19.996683 |
| 4 | put | 16MB | 20.092474 |
| 5 | put | 16MB | 19.960995 |
| 6 | put | 16MB | 19.913609 |
$ ./main -n ? -d 3 -f
| SPE num | direction | file range | bandwidth (GB) |
| 1 | get,put | 32KB | 13.957749 |
| 2 | get,put | 64KB | 20.360701 |
| 3 | get,put | 96KB | 21.250431 |
| 4 | get,put | 128KB | 21.277382 |
| 5 | get,put | 160KB | 21.250431 |
| 6 | get,put | 192KB | 21.183355 |
$ ./main -n ? -d 1 -f
| SPE num | direction | file size | bandwidth (GB) |
| 1 | get | 32KB | 13.288884 |
| 2 | get | 64KB | 22.148140 |
| 3 | get | 96KB | 23.497503 |
| 4 | get | 128KB | 23.663208 |
| 5 | get | 160KB | 23.431866 |
| 6 | get | 192KB | 23.350336 |
$ ./main -n ? -d 2 -f
| SPE num | direction | file size | bandwidth (GB) |
| 1 | put | 32KB | 21.037260 |
| 2 | put | 64KB | 22.550022 |
| 3 | put | 96KB | 23.546970 |
| 4 | put | 128KB | 23.399187 |
| 5 | put | 160KB | 23.285519 |
| 6 | put | 192KB | 23.188963 |
簡単な考察
16MB と 32KB*? (-f) の場合、32KB*? のほうが速い
- 多分 TLB の変換回数の差が効いている。
- hugetlbfs を使用すると新たな事がわかるかもしれないが、FC5 の kernel は disable になっているのでやってない。
SPE が 1 (or 2) つの時の bandwidth が少ない
- ソフト自体の欠陥。このソフトは一旦 DMA 転送を行うと全てが終了するま で待ち、それから次の DMA 転送を行うため、効率が良くないです。
- このソフトは SPE 毎に最大 4 つの DMA 転送を行いますが、スループット を考慮するとバスの帯域が埋まりきっていない。
get と put を同時に行うよりもどちらか一方のみのほうが若干速い
- メモリコントローラの仕様を理解していないので何とも言えない。
SPE が 1 つのときの get と put の速度差が大きい
- 論文に差があるということは書いてあった気がしますが、ここまで大きかっ たかな、、謎です。
そういえば、こんな論文もあるので読み直してみます。
- CELL MULTIPROCESSOR COMMUNICATION NETWORK: BUILT FOR SPEED
- Communication Analysis of the Cell Broadband Engine Processor
このソフトを土台に機能を拡張するのはいろいろな面から厳しいものがある ので、やっぱり自分で作るかなあ、、
さて、RDT261WH のセットアップでもするか、、


