运行给定线程的核心是什么?

时间:2011-04-28 13:48:27

标签: c pthreads cpu openmp

是否有函数或任何其他方式以编程方式知道我的程序(pid)的给定线程正在运行的处理器的核心是什么?如果可能的话,OpenMP或Pthreads解决方案都会对我有所帮助。感谢。

4 个答案:

答案 0 :(得分:4)

我认为这将是特定于平台的。在Windows上,您可以使用NtGetCurrentProcessorNumber,但这可能会消失。

我希望这很难做到,因为没有什么可以阻止线程随时移动到新核心(在大多数应用中,无论如何)。一旦得到结果,它就会过时。

答案 1 :(得分:3)

我认为在Linux上可以试试sched_getcpu()。

答案 2 :(得分:1)

对于pthreads,我认为sched_getaffinity()至少是解决方案的一部分。但不确定pthreads究竟如何命名CPU:s和核心。

答案 3 :(得分:1)

这很难做到,因为答案取决于硬件和操作系统。

hardware locality库是一个新工具,它允许您以OS /硬件无关的方式查询CPU /核心/线程等信息(并设置关联绑定)。它支持大量的硬件和操作系统,因此应该为这些类型的查询添加大量可移植性。一旦映射出系统的拓扑结构,hwloc_get_last_cpu_location将返回线程最后运行的CPU,其中CPU可能意味着核心或硬件线程。