允许您跨多个区域设置使用所有核心的任何标志

Any flag that allows you to use all cores across multiple locales

我正在使用 forall 循环测试我的矩阵乘法。我注意到在我的两个语言环境中,它只使用了 8 个内核中的 7 个。是否有任何 Chapel 标志允许我指定要使用的内核数?

Chapel 中的 Forall 循环应该默认使用所有可用的内核,只要迭代次数超过内核数即可。您使用什么技术来确定仅使用了 7 个内核?您正在执行的循环是什么?

可以用来验证 Chapel 是否知道所有核心(即没有配置错误)的一件事是执行 writeln(here.numPUs());,这将打印出核心数量("processing units"或 "PUs") 在您给定的语言环境中可用。 numPUs() 已记录 as part of the interface supported on the locale type。要检查所有语言环境的核心,您可以这样写:

coforall loc in Locales do
  on loc do
    writeln(here.numPUs());

对于您的具体问题,您可以使用一些方法来改变大多数 forall 循环或运行时本身使用的任务数量,但同样,通常不需要这些来确保 8/正在使用 8 个核心。

有一个通用配置 dataParTasksPerLocale that tells most standard iterators how many tasks to use per locale to implement a forall loop. There's also an environment variable named CHPL_RT_NUM_THREADS_PER_LOCALE 可用于更改运行时用于执行任务的线程数。

但是,如果 Chapel 正确检测到您的系统有 8 个内核(由 numPUs() 验证),那么这两个变量也应该默认为 8。