是否可以在 Linux 上使用 pthreads 打印 CPU 和内核
Posted
技术标签:
【中文标题】是否可以在 Linux 上使用 pthreads 打印 CPU 和内核【英文标题】:Is it possible to print the CPU and core using pthreads on Linux 【发布时间】: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?
【问题讨论】:
What core is a given thread running on?的可能重复 【参考方案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。有关示例应用程序,请参阅我的问题:***.com/questions/6488432/…/proc/[pid]/stat
中的信息是关于具有给定 PID 的进程的信息。要获得关于线程的相同统计信息,请参阅 /proc/[pid]/task/[tid]/stat
而不是其中 [tid]
是线程 ID。 proc(5)
man page 记录了这些 stat
文件中的字段。以上是关于是否可以在 Linux 上使用 pthreads 打印 CPU 和内核的主要内容,如果未能解决你的问题,请参考以下文章