【问题标题】:The status of an OpenMP (C) idle threadOpenMP (C) 空闲线程的状态
【发布时间】:2013-02-19 19:18:58
【问题描述】:

如何在 Linux 上运行的 OpenMP (C) 代码中识别团队的空闲线程?
我想测量作为一个团队工作的线程的空闲时间。是否可以?有没有显示线程状态的字段?

【问题讨论】:

  • 只要获得(仍然)免费的 Oracle Solaris Studio(尽管它的名字,它也有 Linux 版本)。它包括线程分析器工具,它能够收集线程利用率信息并将其呈现在一个漂亮的 GUI 中。

标签: c multithreading parallel-processing openmp


【解决方案1】:

读取/proc/self/task/$tid/status 中的Status 字段,其中tidgettid() 系统调用获取的任务ID(每个线程唯一)

也是/proc/self/task/$tid/stat中的第三个字段

/proc/self/task/$tid/stat 还将包含每个任务的 utimestime 字段,因此您可以获得它们的“活动时间”。检查http://linux.die.net/man/5/proc 以查看它们是哪些字段。

【讨论】:

  • 谢谢!有什么方法可以将 omp_get_thread_num() 对应到 gettid() 结果?
  • 恐怕不行。 omp_get_thread_num() 是特定于进程的,通常从 0 开始计数。而 gettid() 是内核 pid_t。它本质上与进程 ID PID 相同,只是更具体,并且实际上进程中的主任务/线程的 TID 与进程 PID 相同。您需要从每个线程调用gettid() 以确定它们的ID 或枚举目录/proc/self/task
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 2022-01-10
  • 1970-01-01
  • 2020-11-15
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多