gpt4 book ai didi

chapel - 在 Chapel 中获取当前任务 ID?

转载 作者:行者123 更新时间:2023-12-04 02:04:53 25 4
gpt4 key购买 nike

我如何找出哪些任务正在执行一个迭代的哪些迭代forall 循环?

例如,我想感受一下不同 DynamicIter 的行为方式,

use DynamicIters;
var r = 1..1000;
var A: [r] int;

forall i in adaptive(r) {
A[i] = ???;
}

我可以使用 here.id 来发现 forall 循环放置了哪个语言环境迭代,但我不知道如何“查看”其中的任务每次迭代分配给的语言环境。

最佳答案

Chapel 的设计有意避免支持标准语言级别的方式来查询任务的 ID,因为我们不希望它强加任何特定的编号或可能需要的开销,以在不同的底层运行时/操作系统/硬件选择中维护该功能.在编写 coforall 循环时,创建虚拟任务 ID 的标准技巧是执行如下操作:

coforall (i, tid) in zip(myIter(), 0..) do

由于循环的每次迭代都作为一个单独的任务执行,tid 将从 0 开始对每个迭代进行唯一编号。但正如您所注意到的,由于在使用 forall 循环时任务创建被抽象到迭代器中,因此它们没有直接的等价物——您通常需要修改驱动循环的并行迭代器中的任务并行结构,以便推断正在创建什么任务以及它们在做什么。

在您感兴趣的 DynamicIters 模块的特定情况下,有一个 config名为 debugDynamicIters 的参数支持打印有关正在发生的事情的信息,因此如果您使用 -sdebugDynamicIters=true 编译程序,您将对正在发生的事情有所了解任务。当然,您也可以修改迭代器本身(位于 $CHPL_HOME/modules/standard/DynamicIters.chpl )以添加额外的调试打印。

可以超越语言并访问运行时使用的任务 ID,但不能保证这将可移植到不同的运行时任务选项(例如,qthreads、fifo、massivethreads),也不保证它会继续跨 Chapel 的 future 版本工作。例如,在 Chapel 1.15.0 中,以下代码有效:

extern proc chpl_task_getId(): chpl_taskID_t;

forall i in adaptive(r) do
writeln("task ", chpl_task_getId(), " owns iter ", i);

chpl_taskID_t 类型是实现内部的不透明类型,因此可以打印出来,但不能保证它在任务处理中具有任何给定类型选项或使用任何特定的一组值。

关于chapel - 在 Chapel 中获取当前任务 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com