gpt4 book ai didi

java - 高效使用 NUMA 架构

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:54 28 4
gpt4 key购买 nike

我正在编写一个使用大量 CPU 和内存的多线程 Java 程序。该程序的目标是在图形上执行一些算法。该程序在运行 linux 的 NUMA 机器上执行,我希望获得最佳性能。

为此,我为每个 NUMA 节点制作了多个图形副本,以便每个线程都能够访问本地内存上的图形。

本地内存分配部分已经通过在分配图的每个新副本之前设置亲和性来完成。这是用 jna 完成的,所以如果可能的话,我更愿意留在这个库而不是添加 jni 代码。

我的问题是如何检查工作线程正在运行哪个内核以便从本地内存中读取数据?

我知道线程到核心的绑定(bind)在执行期间可能会发生变化。但是,内核会尝试在所有时间片中在同一个 NUMA 节点上运行线程。因此,仅在开始时检查线程在哪个内核上运行对于大多数情况都适用。

最佳答案

事实证明,有一个方法可以通过 jna 调用来获取所需的信息。方法名称是:sched_getcpu。完整的代码片段如下所示

public interface CLibrary extends Library{
public static final CLibrary INSTANCE =
(CLibrary) Native.loadLibrary("c", CLibrary.class);
public int sched_getcpu() throws LastErrorException;
}

现在,当你做

CLibrary.INSTANCE.sched_getcpu();

您获得当前线程正在运行的核心 ID。

关于java - 高效使用 NUMA 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795071/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com