有没有一种函数或其他方法可以以编程方式知道我的程序(pid)的给定线程正在运行的处理器的哪个核心上?如果可能的话,OpenMP或Pthreads的解决方案都会对我有所帮助。谢谢。
有没有一种函数或其他方法可以以编程方式知道我的程序(pid)的给定线程正在运行的处理器的哪个核心上?如果可能的话,OpenMP或Pthreads的解决方案都会对我有所帮助。谢谢。
对于pthreads,我认为sched_getaffinity()
至少是部分解决方案。不过,我不确定pthread如何命名CPU和核心。
这在可移植性方面很难做到,因为答案取决于硬件和操作系统。
硬件地理 库是一个新工具,它允许您以一种与操作系统/硬件无关的方式查询CPU/核心/线程等信息(并设置亲和绑定)。它支持大量的硬件和操作系统,因此应该能够为这些查询添加很多可移植性。一旦映射出系统的拓扑结构,hwloc_get_last_cpu_location
将返回线程最后运行的 CPU,其中 CPU 可以是核心或者硬件线程。