我正在使用forall循环测试我的矩阵乘法。我注意到在我的两个区域设置中,它只使用了 7 个内核中的 8 个。是否有任何教堂标志可以让我指定使用多少个内核?
默认情况下,Chapel 中的 Forall 循环应使用所有可用内核,只要迭代次数超过内核数即可。 您使用什么技术来确定仅使用 7 个内核? 您正在执行的循环是什么?
验证 Chapel 是否知道您的所有内核(即没有配置错误(的一件事是执行writeln(here.numPUs());
这将打印出给定区域设置上可用的内核数量("处理单元"或"PU"(。 numPUs(( 记录为locale
类型支持的接口的一部分。 要检查所有语言环境的核心,您可以编写如下内容:
coforall loc in Locales do
on loc do
writeln(here.numPUs());
对于您的具体问题,您可以使用一些东西来更改大多数 forall 循环或运行时本身使用的任务数量,尽管同样,这些通常不是确保使用 8/8 内核所必需的。
有一个通用的配置dataParTasksPerLocale
告诉大多数标准迭代器每个区域设置使用多少任务来实现 forall 循环。 还有一个名为 CHPL_RT_NUM_THREADS_PER_LOCALE 的环境变量,可用于更改运行时用于执行任务的线程数。
但同样,如果 Chapel 正确检测到您的系统有 8 个内核(由 numPUs(( 验证(,则这两个变量也应默认为 8。