Repa?の過去の値(すなわち、より小さなインデックス)に依存する配列を計算することは可能ですか?アレイの最初の部分(例えば、a[0]
)が与えられる。 (配列の要素を示すにはCのような表記法を使用していますが、混同しないでください)Repaで[i] = f(a [i-1])をどのように計算しますか?
私はtutorialを読んですぐにハックをチェックしましたが、それを行う機能が見つかりませんでした。
(私はあなたがそれを並列化できないため、1次元配列で計算のこの種をやってするのrepAでローミングサービスをしないと思います。しかし、私はあなたが2次元以上の場合には、それを並列化することができると思います。)
EDIT: おそらく私はどのような種類のf
を使用したいのかについて具体的に述べるべきです。 a[i]
がスカラーの場合に並列化する方法がないので、a[i]
はN dimベクトルです。 a[i]
はベクトルに「展開」することができるため、より高い次元(行列など)である必要はありません。したがって、f
は、R^NをR^Nにマッピングする関数です。
例ほとんどが、それはこのようなものだ:b
はN DIMベクトルで
b = M a[i-1]
a[i][j] = g(b)[j]
、M
はN Nの行列(スパースなし仮定)であり、そしてg
は、いくつかの非線形関数です。そして、i=1,..N-1
の値をa[0]
,g
、M
と計算します。私の希望は、(1)このタイプの計算を並列化し、(2)b
などの中間変数を効率的に割り当てる(C言語のような言語で、再利用することができる、Repaまたは同様のライブラリは純粋さを壊さずに魔法のように行うことができます)。
アソシエイティブfの場合、並列化することができ、「スキャン」と呼ばれます。 http://en.wikipedia.org/wiki/Prefix_sum私はRepaのドキュメントでスキャンを見つけることができませんでした。 – Heatsink
repaステンシル、http://hackage.haskell.org/packages/archive/repa/2.0.2.1/doc/html/Data-Array-Repa-Stencil.htmlで行うことができます。 http://stackoverflow.com/questions/6170008/how-to-take-an-array-slice-with-repa-over-a-range –
@Heatsinkスキャンではシリーズを入力として要求しないでしょうか?私にとって、これは[展開](http://en.wikipedia.org/wiki/Anamorphism)のようになります。 – phg