C#における並列処理

 一応、先に下に書いたことが正しいとは保障しない事を書いておく。私はプログラマーでは無いんで。
 
 新たに追加されたparallel.forなどの関数は従来のfor文を差し替えるだけでマルチコアの恩恵を受けられるが、残念ながらfor内の処理の順序が滅茶苦茶になる。多少パフォーマンスが落ちても順序が保障される設定があったら使い勝手がいいのにと思う。ならばメソッドそのものを並列処理しようとparallel.invokeを使ってみたが、戻り値が得られない。多分、引数も。ならば以前、試したことのあるThreadを試すが、これも戻り値は得られない。最終的には非同期型のdelegateなら、配列を渡して答えの配列を受け取れた。ただのdelegateの意義が良く判らない。単なるメソッドと何が違う?。

 FFTの処理をparallel.forで楽して高速化しようと思ったがそうはいかなかった。でも順番が滅茶苦茶になるのを置いといて実行したが、6コアあって半分位しか速くならない。それも相当、実用上使わない位に窓長を長くしてもそんなもんだ。だから1回のFFT内で高速化するのではなく、波形全体のFFT処理の中でCPUの数だけFFTを走らせて速くしたほうが良いのだろう。MatlabとかでFFTがCUDAで速くなったというのも2次元FFTでの話ではないだろうか。