問題タブ [repa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - repa での動的プログラミング
関連する 2 つの質問。
repa配列の変更可能な (ST モナド) 実装がない理由はありますか? Data.Vector.Mutableと同等ですが、形状があります。
これに関連して、ボックス化されていない表現で、動的プログラミングアルゴリズム (同じ配列の他の要素から計算された配列要素) をどのように実装することになっていますか?
haskell - Repa配列形状の拡張
Repa配列に取り込みたい画像を生成するプログラムを書いています。私は現在次のタイプを使用しています:
ピクセルを表すために、私はを配列に変換Colourする(おそらく非効率的ですが機能的な)関数を持っています:DIM1
現在の私のプログラムの画像は、寸法[Colour]を表す値にすぎません。(Int, Int)
Array V DIM2 Colourこれを使用して簡単に構築できますが、colourToRepaこの配列を拡張する方法はありArray U DIM3 Doubleますか?
リストを使用するだけで使用できますが、Repaのマップは配列の形状を保持します(aからmapaに移動したい)。DIM2DIM3
performance - Haskellでインライン化の位相制御を使用するにはどうすればよいですか?
ドキュメントによると、
GHCのパイプラインで、INLINEプラグマがオンになっているタイミングを正確に制御したい場合があります。
なぜ私はこれが欲しいのですか?(RULESプラグマも使用する場合を除いて、この場合、関連するルールを実行できるようにするために、関数のインライン化を延期したい場合があります。)単純化プロセスの特定の段階でのみインライン化する方がよい関数はどれですか。
haskell - Repa はデータのメモリ レイアウトを指定しますか?
Repa が「マニフェスト表現」のいずれかでデータのメモリ レイアウトを指定していることはわかりません。これはどこかに指定されていますか?
もちろん、実験を通じて調べることはできますが、レイアウトが公式のものであるか、いつでも変更される可能性があるかどうかを知りたい.
編集:明確にするために、 aStorable Vectorがどのようにレイアウトされているかは理解していますが、 Array U DIM2 Double(たとえば)が行優先、列優先、または何かおかしいのでしょうか。
haskell - repa-devilで使用する画像を作成する
私はrepa-devil画像の読み取りと書き込みに使用しています。次に、プログラムで画像を作成する必要があります。ただし、すべてのImageコンストラクター(などRGB)にはData.Array.Repa.IO.DevIL、外部メモリバッファー配列が必要です。私は立ち去って、その外国のポインターのもの(怖いように聞こえます)を扱う方法を学ぶ必要がありますか?または、ボックス化されていない配列を必要なタイプに変換できますか?
haskell - レパとDPHの違い
私は最近、ライブラリとライブラリでの今後の一般化されたストリームの融合に関する論文を読みました。とても面白い展開になりそうです。私は今、実験を始めています (GHC 7.6 から始めて、7.8 SIMD バージョンが出たらアップグレードする予定です)。また、ライブラリのドキュメントから、並列配列の作業ができることがわかります。GHC 7.4の時点で準備ができていないと見なされていたものと比較して、成熟したバージョンのようです. GHC 7.6 の時点で、とパッケージの間の主な長所と短所は何なのか疑問に思っています。StackOverflow と google を検索しましたが、との比較が見つかりませんでした。したがって、この質問。vectorDPHDPHRepaRepaDPHDPHRepaDPHRepaDPH
haskell - Repa: 列の ZipWith'ing
次のrepa関数を書くためのより速い/より良い方法があるかどうか疑問に思っています
ここにいくつかのサンプル出力があります
haskell - repa-devil で読み取った画像のインデックス作成
画像内のピクセルの RGB コンポーネントを調べようとしていますが、その方法がわかりません。
私が得るエラーは次のとおりです。
まず、メッセージがわかりません。コンパイラが を期待しているように見えたArray something DIM3 somethingのに、Array F DIM3 Word8. これらのタイプが一致しないのはなぜですか? Haskell wiki のRepa チュートリアルを読みましたが、これを機能させる方法がまだわかりません。
haskell - Parallel Repa コードはスパークを作成しません
私はサブセット積を行うコードを書いています: それは要素のリストと (同じ長さの) 標識変数のリストを取ります。積はツリーで計算されます。これは、アプリケーションにとって重要です。各製品は高価であるため、私の目標は、ツリーの各レベルを並行して計算し、連続するレベルを順番に評価することでした。したがって、ネストされた並列処理は行われません。
コード全体のトップレベル近くにある 1 つの関数に repa コードしかありません。subsetProd はモナドではないことに注意してください。
手順:
- リストをペアにまとめます (並列処理なし)
- チャンクされたリストを圧縮します (並列処理なし)
- このリストに製品関数をマップし (Repa マップを使用)、遅延配列を作成します。
- computeP を呼び出してマップを並行して評価する
- Repa の結果をリストに戻す
- 再帰呼び出しを行います (入力の半分のサイズのリストで)
コード:
プログラム全体は、
これらの指示に従って、GHC 7.6.2 x64で。
を使用してプログラム(サブセット)を実行しました
8秒後:
-N パラメータを増やすとコードが遅くなります (-N1 の場合は 7.628 秒、-N2 の場合は 7.891 秒、-N4 の場合は 8.659 秒)。並列性が得られません。また、多数の最適化を行ってコンパイルすると、ランタイムには役立ちますが、並列処理には役立ちません。
Threadscope は、3 つの HEC で重大な作業が行われていないことを確認していますが、ガベージ コレクターは 4 つの HEC をすべて使用しているようです。

では、なぜ Repa は火花を散らさないのでしょうか? 私のプロダクト ツリーには 64 枚の葉があるので、Repa が内部ノードごとにスパークを作成したとしても、最大63 個のスパークが存在するはずです。並列処理をカプセル化する ST モナドの使用と関係があるように感じますが、これが問題を引き起こす理由はよくわかりません。おそらく、火花は IO モナドでのみ作成できますか?
この場合、各レベルが並行して行われるこのツリー製品をどのように実行できるかについてのアイデアはありますか (ネストされた並列処理が発生することなく、これは私のタスクには不要と思われます)。一般に、ツリー プロダクトを並列化するか、Repa をより有効に活用するためのより良い方法があると思われます。
スパークが作成されていない場合でも、-N パラメーターを増やすとランタイムが増加する理由を説明するためのボーナス ポイント。
編集 上記のコード例を、私の問題のコンパイル例に変更しました。プログラム フローは、実際のコードとほぼ完全に一致しています。いくつかの入力をランダムに選択し、それらに対してサブセット積を実行します。私は今アイデンティティモナドを使っています。私は自分のコードに多くの小さな変更を試みました: インライン化するかどうか、bang パターンかどうか、2 つの Repa リストと Repa zipWith を使用するバリエーションと、リストを順番に圧縮して Repa マップを使用する方法など、どれもまったく役に立ちませんでした。
サンプル コードでこの問題に遭遇したとしても、実際のプログラムははるかに大きくなります。
haskell - OS X の repa-devil パッケージのアーキテクチャの不一致
cabal からインストールした repa-devil パッケージの使用に問題がありcabal install repa-devilます。
たとえば、これは私の ghci トランスクリプトの一部です。
指定された dylib ファイルで lipo を実行します。
と
どんな助けでも大歓迎です。