我正在编写一个使用密集型 CPU 和内存的多线程 Java 程序。该程序的目标是在图上执行一些算法。该程序在运行 linux 的 NUMA 机器上执行,我希望获得最佳性能。
为此,我为每个 NUMA 节点制作了多个图形副本,以便每个线程都能够访问本地内存上的图形。
本地内存分配的部分已经通过在分配图的每个新副本之前设置亲和性来完成。这是用 jna 完成的,所以如果可能的话,我更愿意继续使用这个库而不是添加 jni 代码。
我的问题是如何检查工作线程正在运行哪个内核以便从本地内存中读取?
我了解线程到核心的绑定在执行期间可能会发生变化。但是,内核尝试在所有时间片上在同一个 NUMA 节点上运行线程。因此,仅在开始时检查线程在哪个内核上运行对于大多数情况都有效。