私が怠け者Tree
で、その葉が問題の可能な解決策であるとしましょう
data Tree a = Node [Tree a] | Leaf (Maybe a)
解決策を 1 つだけ見つける必要があります(または、解決策がないことを確認する必要があります)。
私はPコアマシンを持っています。時間とメモリ効率の両方を考慮すると、 P 個の異なる分岐に沿って並列に検索することだけが理にかなっています。
たとえば、計算量がほぼ同じ ( CPU 時間のT秒に相当) の 4 つのブランチがあり、それぞれに答えがあるとします。
デュアル コア マシンで 4 つの分岐すべてを真に並列に評価すると、それらはすべて約2T秒で終了します。
最初の 2 つのブランチだけを評価し、残りの 2 つを延期すると、わずかT秒で答えが得られ、メモリの使用量も 2 倍少なくなります。
私の質問は、これを達成するために並列 Haskell インフラストラクチャ (Par モナド、並列戦略など) を使用することは可能ですか、それとも async のような低レベルのツールを使用する必要がありますか?