更新
:我刚找到
this documentation page
. 希望有一个链接
the documentation that I'd been using
更新2
:此文档使我对如何使用控制策略模块。但是我还没有完全解决这个问题。。。见问题的结尾。
我一直想用
parListChunk
下面是我的非并行函数:
possibKs n r = [ (k, (hanoiRCountK n k r)) | k <- [1 .. n-1] ]
我想把它并行化,就像这个天真的尝试:
possibKs n r
| n < parCutoff = results
| otherwise = parListChunk parChunkSize results
where results = [ (k, (hanoiRCountK n k r)) | k <- [1 .. n-1] ]
但这种结构不适合parListChunk。
医生说:
parListChunk :: Int -> Strategy a -> Strategy [a]
parListChunk按顺序应用
并列的清单。有助于增加
粒度
很好,这就是我想要的。但是怎么用呢?我还没找到这样的例子。如果我理解类型声明,parListChunk是一个
Int
Strategy<a>
(借用C++参数化类型标记来帮助检查我是否真正理解了这一点),并返回一个
Strategy<[a]>
. 在我的情况下,我正在处理
内景
对于
a
所以parListChunk需要一个
Strategy<Int>
. 那么什么是
Strategy
我该怎么做呢?一旦我成功地使用了parListChunk,我该如何处理
战略
这个
Strategy type is defined
这样地:
type Strategy a = a -> Done
全部的
战略文件。)
所以
策略<内部>
是一个函数,它接受Int类型的参数并返回Done。显然,它会导致它的论点在某个特定的时间或某物上被评估。我在哪里买的,我应该用哪种?
sPar :: a -> Strategy b
sSeq :: a -> Strategy b
r0 :: Strategy a
rwhnf :: Strategy a
但它们都不允许您确定类型参数--它们生成
Strategy<b>
一
,否则无法提供参数
! 怎么回事??除此之外,我不知道这些是什么意思。
我确实找到了一个类似函数的例子
parList being used
因此:
return . maximum $ map optimize xs `using` parList
它用这个时髦的
using
函数,声明为:
using :: a -> Strategy a -> a
很公平。。。就我而言,我可能想要
一
[Int]
,因此需要一个int列表和
Strategy<[Int]>
你做了什么?将策略应用于列表?和)返回整数列表。所以我试着以parList为例,改变了我的想法
otherwise
守卫到:
| otherwise = results `using` parListChunk parChunkSize
Couldn't match expected type `[(Int, Integer)]'
against inferred type `a -> Eval a'
Probable cause: `parListChunk' is applied to too few arguments
In the second argument of `using', namely
`parListChunk parChunkSize'
In the expression: results `using` parListChunk parChunkSize
有人能告诉我这个房间用什么吗
Strategy a
Strategy [a]
看着
Basic Strategies
,我想我需要使用
rseq
战略。可能。所以我试着
| otherwise = results `using` (parListChunk parChunkSize rseq)
These API docs
Control.Parallel.Strategies
.
有什么线索吗?顺便说一句,我经常收到关于加载包的消息:
Loading package deepseq-1.1.0.0 ... linking ... done.
Loading package parallel-2.2.0.1 ... linking ... done.
API docs
Edward