【发布时间】:2012-03-11 21:46:07
【问题描述】:
我有一个 OpenMP 程序,在 8 核机器上运行 6 个线程。如何从另一个程序(非 openmp,纯 C 程序)中提取此信息(num_threads = 6)。我可以从底层内核获取此信息吗?
我使用“sar -q 1 0”来使用 run_queue 长度,但这不会产生一致的结果。有时它会给出 8 倍,或多或少几倍。
【问题讨论】:
标签: c multithreading kernel openmp
我有一个 OpenMP 程序,在 8 核机器上运行 6 个线程。如何从另一个程序(非 openmp,纯 C 程序)中提取此信息(num_threads = 6)。我可以从底层内核获取此信息吗?
我使用“sar -q 1 0”来使用 run_queue 长度,但这不会产生一致的结果。有时它会给出 8 倍,或多或少几倍。
【问题讨论】:
标签: c multithreading kernel openmp
在 Linux 中,线程是进程(参见第一篇文章 here),因此您可以使用 ps -eLf 询问正在运行的进程列表。但是,如果机器有 8 个内核,则 OpenMP 可能创建了 8 个线程(尽管它当前使用其中 6 个线程进行计算);在这种情况下,您的代码必须在某处(例如文件或 FIFO)存储有关它正在使用的线程的信息。
【讨论】: