2017-01-25 6 views
1

Repaを使用して大量のデータサンプルを処理するプログラムを作成しました。パフォーマンスはこのプログラムにとって重要です。操作の大部分は、多次元配列上の平行なマップ/フォールドを必要とし、Repaはこれに最適です。しかし、私のプログラムではまだ1次元配列しか使用せず、並列性を必要としません(並列性のオーバーヘッドはパフォーマンスに悪影響を及ぼします)。これらの操作の中には、Repaがサポートしていないカスタムアキュムレータ付きのtakeまたはfoldのような機能が必要です。だから私はRepa配列を反復処理することで、これらの操作を自分で書いています。DIM1 Repa ArrayとVectorのパフォーマンス

Repaの代わりにVectorを使用してこれらの操作を書き直す方がよいでしょうか?彼らはより良いパフォーマンスをもたらすだろうか?

私は一次元のRepaアレイがVectorのように実装されていると読んだので、より良いパフォーマンスが得られることは間違いありません。一方、Vectorには、自分で書くのではなく、使うことができる便利な組み込み関数があります。

+0

Repaは、「DIM1」だけでなく、フード内のすべてのディメンションに箱なし( 'U')または格納可能(' F')ベクターを使用します。ですから、もしあなたがそれらの 'DIM1'配列を並列に処理する必要がなければ、' vector'パッケージを直接使うのが良いでしょう。 –

+0

はい、そうです。すべてのN次元配列は、フードの下のベクトルです。その唯一の形が変わります。 –

答えて

0

Data.Array.Repaではなく、Data.Vector.Unboxedでプログラムの一部を実装しました。わずかな改善を除いて、アルゴリズムは同じです。 Data.Vector.Unboxedは、順次操作のために1次元のData.Array.Repaより4倍速いようです。

関連する問題