- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道使用嵌套“ forall”循环的优缺点。我确实了解的一件事是,“ forall”将调用“独立”或“ leader”迭代器,即使在多个语言环境中,也可能会或可能不会导致额外的并行性。但是,默认情况下,产生的任务数量限制为“ here.maxTaskPar”,因此我们只能获得如此多的并行性。如果两个“ forall”循环都遍历分布式数据,那么我可以看到赞成使用嵌套“ forall”语句的参数,但是当它们都在本地时又如何呢?当其中一个是本地的而另一个不在时?
最佳答案
如您所述,此问题的简短答案是“取决于”,因为Chapel的forall
循环调用可能由任何人编写的迭代器,因此可以执行任何操作。但是,正如您还提到的那样,对于许多Chapel的标准类型,如Executing Chapel Programs::Controlling Degree of Data Parallelism中所述,有某些旋钮控制执行策略,并遵循某些约定。我的答案的其余部分将针对此类情况撰写。
对于完全本地嵌套的forall
循环,其中所有迭代都执行相似的工作量,您应该看不到使用嵌套的forall
循环之间的巨大区别:
forall i in 1..m do
forall j in 1..n do
var twoPi = 2*pi;
for
循环:
forall i in 1..m do
for j in 1..n do
var twoPi = 2*pi;
forall
循环将创建
dataParTasksPerLocale
任务,而该值默认为
here.numPUs()
(在当前语言环境中,处理单元或核心的数量,或计算节点)。然后,当每个内部循环开始运行时,如果
dataParIgnoreRunningTasks
是
false
(默认情况下),则其迭代器将注意到
dataParTasksPerLocale
已经在运行,因此将避免创建其他任务。结果是,由于每个内部循环都假定所有处理器内核已经在忙于运行任务,因此可能会串行运行其所有迭代。
forall i in 1..m do
if (i < m/2) then
forall j in 1..n do
var twoPi = 2*pi;
m/2+1..m
范围内的任务都可能在拥有
1..m/2
迭代的任务之前完成。假设这适用于一半的任务(这可能适用于上述范围内的循环,其中任务往往被分配了连续的迭代块)。这些任务应该很快完成。一旦发生这种情况,由另一半任务执行的每个内部循环可能会看到少于
dataParTasksPerLocale / 2
任务正在运行,并创建其他任务来执行其迭代。为什么我说“可以”?因为如果多个外部循环任务同时运行,那么将有多个同时发生的内部循环,并且每个内部循环都将查询正在运行的任务的数量并竞争创建另外的
dataParTasksPerLocale - here.runningTasks()
任务,因此某些任务可能并行执行其内部循环,而其他任务可能并行执行连续使用单个任务。
forall i in 1..m do
forall j in 1..n do
computeForPoint(i,j); // imagine the amount of work here varies significantly based on i and j
forall i in 1..m do
for j in 1..n do
...
for i in 1..m do
forall j in 1..n do
...
dataParTasksPerLocale
。另外,我可能会同时进行并行处理,并依靠迭代器和运行时来避免创建过多的任务:
forall i in 1..m do
forall j in 1..n do
...
m * dataParTasksPerLocale
循环在每个目标语言环境上创建至少一个任务,并且基于与上述本地情况相同的启发式方法,每个目标语言环境最多可能创建
forall
个任务。因此,分布式数据结构上的循环通常应尽可能使用
dataParTasksPerLocale
循环来优化局部性并提高创建可伸缩代码的机会。
关于chapel - 使用嵌套的“forall”循环是否有任何利弊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350695/
如果已经有人问过这个问题,请发表评论,以便我将其删除。 我知道电子邮件验证的优点,特别是在垃圾邮件方面(这很容易杀死我,因为大多数功能都在发表评论中)。 我正在考虑删除我目前正在构建的应用程序的电子邮
您与 Websync 合作的体验如何? ( cometd 框架)?在使用它之前,您是否考虑过任何替代方案? 到目前为止我可以说 优点: 非常简单易用 不需要任何服务器配置 缺点: 昂贵(结果为我们节省
我正在寻找一个好的规则引擎。 我已经看到它存在两个好的项目:JBPM和Drools。 我不太了解两者之间的区别,也不知道要使用什么理想工具。 请您向我提供更多信息以及您在其他方面的经验,以及您认为最适
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
什么是技术/编程/非 SEO 对于域和子域,www 或 no-www 的优缺点是什么? 来自杰夫·阿特伍德 (Jeff Atwood) 的推特 http://twitter.com/codinghor
我是一名优秀的程序员,十分优秀!