私はData Parallel Haskellについて多くの研究をしてきましたが、2つの別々の並列配列タイプが見つかりました。 [::]
型は研究論文に多く見受けられ、理想型と思われるが、PArray
はどこにでも詰まっているようだ。サブジェクトのwikiページでは、タイプ[::]
の配列をベクトル化されていないコードに渡すことはできません。どうして?なぜこの中間体はPArray
タイプですか?それは私にとって全く不必要なようです。 wikiはそれを「フラットアレイ」と呼びますが、ベクトル化のポイントはパラレルアレイをフラットにすることです。Data Parallel HaskellのPArrayと[::]の違いは何ですか?
更新:もっと多くの論文やドキュメント、ソースコードを読んだ後、私はさらに混乱しています。 [::]
またはその同義語PArr
はGHC.PArrでフラットアレイとして実装されているように見えますが、PArray
は複数の場所でフラットと呼ばれる中間タイプがData.Array.Parallel.PArray.Baseに実装されており、そこからデータファミリとしてインポートされます私が読んだ論文の多くに記述されている変容。フラットアレイがフラットでなく、ネストされたフラットがフラットなのはなぜですか?
更新2:より多くの研究の後、私は訴訟が完全な混乱であることを発見しました。 Wikiページhasn't had any content updatesは、ほぼ1年で、ハッカーのドキュメントに矛盾しています(Data.Array.Parallel.Prelude、特別なプレリュードをインポートしないよう明示しています)。 GHC Trac pageも古くなっています。例えば、少なくともHackageに関する限り、私はそうしていないパッケージを言及しています(他の場所を探す場所はまったくありません) )、存在しないし、dph-lifted-vsegのようなパッケージは言及していません。より良いノートで
が、私は今 GHC.PArrでコメントのこの部分でほのめかし、最初の更新の答えを理解して信じている:それはベクトル化が有効になっている、というのが私の推測がある-- BIG UGLY HACK: The desugarer special cases this module. Despite the uses of '-XParallelArrays',
-- the desugarer does not load 'Data.Array.Parallel' into its global state. (Hence,
-- the present module may not use any other piece of '-XParallelArray' syntax.)
--
-- This will be cleaned up when we change the internal represention of '[::]' to not
-- rely on a wired-in type constructor.
、そのモジュールはフラット化変換を使用する別の表現に自動的に置き換えられます。これは、私の元の問題を解決して、
type [::] = PArray
のようなものでもあります。しかし、後者の点があまり意味を持たないだけでなく(ベクター化がオフのときに[::]
をフラットな配列型に制限するのはなぜですか?)、上記のコメント以外の理論をサポートする証拠は見つかりませんでした。何かを学ぶ唯一の信頼できる方法は、その大きさと複雑さを考えれば、私が成功すると確信していたとしても、私がやりたいことであるGHCソースを見ることです。
あなたの答え – Simon
にリンクの興味深い部分を含める方が良いですあなたはPArrayは「怠惰な配列」に対応していることを言って[::]に相当するということです「厳密な配列に?」 – gereeter