パフォーマンス

それでは実際のベンチマークを見てみる。
盤の大きさを12から18まで変化させ、SPUスレッド数を1から6まで変化させた場合の経過時間を計測した。単位は秒である。

またこの表を、スレッド数1に対して何倍速くなったかとして表現した。

同じようなアルゴリズムによる実装で、Core Duoの1スレッドでの計測ではサイズが16で12.0秒、17で90.0秒、18で624.6秒であった。
今回面白いのは、盤のサイズが小さいとき、スレッド数が多くなると計算速度が加速されて、SPUスレッドの数が増えた以上に効率化される事だ。これはSPUに仕事を投げた後にその計算が早く終わりすぎるため、計算するよりもDMA転送が総計算時間に占める割合が多くなってしまうことにあると考えられる。この場合SPU数が多いと他のスレッドがDMA転送でビジーなときに新しい仕事を受け取って計算することができるので効率化されることになる。
SPUだけで動作するプログラムの場合と比べて、盤のサイズが小さいほど遅くなっていることから上記のように考察される。

そうなると問題サイズが大きくなるほど、実際の並列化効率に近づくと期待されるが、18のとき、プログラムの効率はほぼSPU数に比例する。今回のコードは必ずしも完全な平等ではなく、ある程度の仕事の余りが出てしまうのだが、問題サイズが大きいとほぼ無視できるようであり、期待以上の効率と言える。