首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是动态并行?

什么是动态并行?
EN

Stack Overflow用户
提问于 2012-02-10 01:01:45
回答 1查看 447关注 0票数 2

我不确定是否能正确理解Haskell中静态并行和动态并行之间的区别。

假设我有一个映射函数,我可以很容易地使用parMap rdeepseq f xsmap f xs `using` parList rdeepseq将其并行化。但这当然会造成太细微的粒度。所以我使用parListChunk s rdeepseq来获得更好的粒度。因此,我可以创建与内核数量(由-Nx选项确定)一样多的火花,而不是为每个列表元素创建火花,或者创建2-3倍以上的火花以实现灵活的负载平衡。

但是,我根据#cores调整火花/线程的数量,这是一种动态并行吗?我倾向于相信不是。

如何实现动态并行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 04:37:39

免责声明:我是parallelisim的业余爱好者

基于内核数量的分块似乎是错误的。取而代之的是,基于单个内核上应该完成多少工作的块:足够重要,以至于内核实际上必须吞噬它,但足够小,可以以重要的方式将整个任务分块(超过1个块)。只要单个数据块的工作量明显大于上下文切换和调度任务的成本,那么每个核心只有1个数据块或1000个数据块并不重要。如果你想要最小的开销并行性,那么是的,以这样的方式将你的问题分解成块,这样你就可以在每个核上恰好调度1个块来完成任务。但是,如果您想要dynamic parallelism,那么您需要对调度的成本有所了解;切换和调度任务的开销会稍多一些,但是对于大小足够的块,开销不会有太大影响。如果一项任务被分成比核心更少的块,那么任务很可能一开始就不需要并行化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9215284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档