【发布时间】:2015-02-08 21:58:18
【问题描述】:
我在程序开始时使用 OpenMP 进行并行排序。加载和排序数据后,程序将作为守护程序运行,不再使用 OpenMP。有没有办法关闭 OpenMP 创建的空闲线程? omp_set_num_threads() 不会影响已经为任务创建的空闲线程。
【问题讨论】:
-
你有一些代码吗?您使用哪种编程语言?
-
为什么这很重要?这对您有何影响?
-
这很重要,因为我最终得到了大量的空闲线程。我为系统的每个核心运行我的守护程序的副本。在当今典型的硬件上,它有 48 个内核,所以我有大约 2300 个空闲的 OpenMP 线程什么都不做。我需要 OpenMP 来加速重启,我很少完全重启所有实例。这一点也很重要,因为这些线程使 coredump 的问题分析变得复杂。
-
弗拉基米尔,我还没有创建一个独立的测试用例,这是我正在运行的 OpenMP 代码:github.com/tarantool/tarantool/blob/master/third_party/…,后来我在 gdb 和核心转储中看到了 OpenMP 线程。
-
如果您在 48 核系统上有 2300 个空闲 OpenMP 线程,则说明您的代码或环境存在严重问题。这不是一个合理的情况。
标签: openmp