我正在开发一些具有可变线程数的 C++ 多核程序,我想知道如何设置适当的(实际上是“最好的”)亲和力。我使用 Boost-threads,所以我可以调用 get_hardware_concurrency() 来了解有多少逻辑内核。到现在为止,我写了一个映射“n_th thread to n-th logical core”,但这并不是最聪明的事情,因为多插槽处理器和超线程。我的程第 2 个物理上的第 1 个逻辑,...,第 n 个物理上的第 1 个逻辑,第 1 个物理上的第 2 个逻辑等等。
我发现很多东西都在讨论如何发现 HT 是否启用(CPUID)以及如何确定每个包的逻辑和物理核心。我知道我必须处理一些汇编代码,这并没有吓到我,但我真的不知道如何了解有关逻辑核心、物理核心和包的完整信息以及操作系统如何处理所有这些信息。
作为最简洁的我:我怎么知道操作系统(Windows和Linux)称为N-th的线程的确切位置(物理核心和包)?