2011-12-28 1 views
7

私は実際にはその同時性の能力にかかわらず、Repaのインターフェイスが好きです。実際には、配列は比較的小さいので並列化が必要であり、並列化は役に立たず、有害です。並列化せずにRepAを

私は自分のプログラムでparallel-ioを使用しているので、-threadedをコンパイルし、+RTS -Nxで実行します。これにより、repaの並列化が可能になります。 repaの並行処理機能を無効にする方法はありますか?

Hm、これを書いている間は私はDIM1以外のものが必要であるとは思っていなかったので、Vectorに切り替える必要があります。しかしそれにもかかわらず、その質問への答えは有用であろう。私は、並列実行してもらう

警告メッセージは、私が実際に自分のコードにはforceを持っていない

Data.Array.Repa: Performing nested parallel computation sequentially. 
    You've probably called the 'force' function while another instance was 
    already running. This can happen if the second version was suspended due 
    to lazy evaluation. Use 'deepSeqArray' to ensure that each array is fully 
    evaluated before you 'force' the next one. 

です。

+0

興味深い質問ですが、リパを並列化するとパフォーマンスが低下することは確実ですか?あなたはそれをプロファイリングしましたか? –

+0

@DanBurton少なくともN4では '+ RTS Nx'がない場合より3倍長く実行されます。それは警告メッセージが出力されたためです。私はポストに警告メッセージを入れます – Yrogirg

+0

あまりにも小さいリポジトリでオペレーションをパラレル化すると、驚くことになります。私は、減速を引き起こす警告メッセージの出力に大きく賭けています。 – ehird

答えて

3

http://code.ouroborus.net/repa/repa-headからRepa 3の開発版を使用してください。シーケンシャルに配列を評価する "force"(computeSと呼ばれる)のバージョンがあります。

RepAは小さな配列の操作を自動的に順序付けしません。 (map f xs)では、ランタイムは 'f'が 'xs'のサイズとして何をしているかに依存します。 Repaは 'f'がやっていること(それは難しいだろう)を解決しようとしないので、計算がどれほど費用がかかるかはわかりません。