允许您跨多个区域设置使用所有核心的任何标志
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。
我正在使用 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。