【问题标题】:Is it possible to print the CPU and core using pthreads on Linux是否可以在 Linux 上使用 pthreads 打印 CPU 和内核
【发布时间】:2011-07-01 14:42:29
【问题描述】:

我正在努力让多线程应用程序在多个内核上运行。我研究了亲和力、调度等。有没有办法找出任何线程正在运行的 CPU Id?我现在正在使用 sched_getaffinity - 但我认为这与进程 ID 有关,而不是进程中的线程。多线程应用在 Windows 上运行良好,但在 linux 上似乎受 CPU 限制(仅使用一个 CPU)

更新

如果我的 linux 应用程序启动 64 个线程 - 我仍然只有一个 pid 对吗?我仍然理解每个启动的线程都可以在目标硬件上的不同 CPU/内核上运行,对吧?

这里有一个示例应用程序:How do I make a multi-threaded app use all the cores on Ubuntu under VMWare?

【问题讨论】:

标签: linux multithreading pthreads


【解决方案1】:

你的第一个问题

有没有办法找出 CPU Id 任何线程正在运行?我是 现在使用 sched_getaffinity

sched_getaffinity 不返回 CPU,它返回合格 CPU 的掩码。它说:

亲和力掩码实际上是一个 每个线程的属性可以是 独立调整每个 线程组中的线程。

然后

如果您使用的是 POSIX 线程 API,然后使用 pthread_setaffinity_np(3) 而不是 sched_setaffinity().

为了简单地找出使用的 CPU,/proc/[pid]/stat 有一个“处理器”字段:

processor %d (Linux 2.2.8 起) 上次执行的 CPU 编号。

你的第二个问题:

多线程应用在 Windows,但似乎受 CPU 限制 linux上(只使用一个CPU)

显示展示此问题的最小示例。

【讨论】:

  • 感谢您的回复 - 我现在正在尝试 pthread_setaffinity_np。有关示例应用程序,请参阅我的问题:stackoverflow.com/questions/6488432/…
  • /proc/[pid]/stat 中的信息是关于具有给定 PID 的进程的信息。要获得关于线程的相同统计信息,请参阅 /proc/[pid]/task/[tid]/stat 而不是其中 [tid] 是线程 ID。 proc(5) man page 记录了这些 stat 文件中的字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多