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

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

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

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

我想在Linux上可以试试sched_getcpu()。

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

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

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