C#における並列処理

y_takeuchi2008-11-30

DeleGateを使って並列処理を行い、プログラムの速度向上を試みようと、ベンチマークソフトを作成してみた。
44kHzサンプリングの5秒間の白色雑音をデジタルFIRフィルターにより8回バンドパスをかけてFFTするもの。

Athlon64x2 2.6GHz 32bit:1スレッド→11.1sec 2スレッド→12.3sec 4スレッド→13.3sec
Athlon64x2 2.6GHz 64bit:1スレッド→12.4sec 2スレッド→12.5sec 4スレッド→12.4sec
Core Duo 1.66GHz 32bit:1スレッド→18.8sec 2スレッド→18.4sec 4スレッド→18.3sec
Atom270 1.66GHz 32bit:1スレッド→43.0sec 2スレッド→45.0sec 4スレッド→43.0sec
Atom270 2.00GHz 32bit:1スレッド→34.3sec 2スレッド→34.3sec 4スレッド→34.3sec
Atom330 1.66GHz 32bit:1スレッド→56.6sec 2スレッド→56.6sec 4スレッド→57.3sec

結果から言えば、やはり、ぜんぜん並列処理の恩恵は無い。配列からデータを受け取ったり入れたりする作業が多いので、CPUが遊んでいる時間が多いのかも知れない。そのせいなのか、Atom270は1.66GHzから2.0GHzにオーバークロックした結果が、34.3/43=80%と、1.66/2.00=83%と、動作周波数以上の伸びがある。多分、メモリのクロックやFSBも上がったせいであろう。
Atom330の結果が極端に悪いが、Windows Home Serverで動かしているので、色々な設定がサーバー仕様になっているのが原因だと思う。
Athlon64x2は64bit環境なので、64bitコンパイルによるSSEの使用による速度向上に期待したのだが、ならなかった。ただ、本命のデジタルFIRフィルタープログラムでは多少の速度向上が見られる。