12

ST-Monad で 2 つの計算を並行して実行する方法を探しています。(STUArray を使用して) かなり大きな配列を構築していますが、それを並行して行いたいと考えています。

これまでのところ、これこのQ&Aをstackoverflowで見つけましたが、最初のケースは純粋なコードのみを処理し、2番目はIOモナドを処理するため、私の場合には適用されません-しかし、私は状態スレッドにいます。

monad -parallelパッケージも見つけましたが、ST 用の「MonadParallel」のインスタンスが必要です。また、monad-parパッケージは、純粋な計算または IO モナドのみをサポートします。

ST 内で並列モナド計算を行う方法はありますか?

4

2 に答える 2

7

まず第一に、あなたの質問のうち、並列と配列の 2 つの単語だけで、repaを確認することをお勧めします。また、 Data Parallel Haskellもチェックしてください。Haskell の道の次の大きなマイルストーンになることが約束されており、このプロジェクトには素晴らしい人々が関わっています。

IO特定の質問に関しては、モナド、すでに名前が付けられたモナド並列および非同期mapConcurrently、まさにあなたが求めていることを実行できるライブラリがあります。stToIOにエスケープするために使用することを検討しましたIOか?

のインスタンスを持つ で動作するように標準バージョンを拡張するLifted-asyncライブラリもあります。したがって、おそらくそのバージョンの を使用するか、少なくともそれをインスピレーションとして使用して、独自のものを実装できます。MonadBaseControlSTmapConcurrently

于 2013-04-12T11:45:01.673 に答える
3

ST モナドを安全に並列化できるかどうか、またはそれが理にかなっているのかどうかはわかりません。通常、状態モナドの計算は、以前の計算の結果である状態に依存するためです。

ただし、できることは、リストから配列を作成することです。リストの作成は、たとえばparMap並列パッケージのようなものによって簡単に並列化できます。

配列データの作成方法について詳しく教えていただけると、より良い回答が得られる可能性があります。

于 2013-04-12T09:36:17.113 に答える