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