是否可以在 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 和内核的主要内容,如果未能解决你的问题,请参考以下文章

Linux编译命令-pthread & -lpthread

Linux系统调用创建进程和线程

Linux C++ pthread是什么缩写?(POSIX Threads)<pthread.h>

如何在 pthreads 的读写锁中防止写入器饥饿

Pthread 超时

C++:Linux上的pthread状态监控