如何在 Windows 上将 c++11 线程关联设置为 NUMA 节点?

Posted

技术标签:

【中文标题】如何在 Windows 上将 c++11 线程关联设置为 NUMA 节点?【英文标题】:how to set c++11 thread affinity to NUMA node on Windows? 【发布时间】:2020-08-26 21:55:14 【问题描述】:

在 Windows 上,我该怎么做:

查询系统有多少个NUMA节点 设置 std::thread 与特定 NUMA 节点的 CPU 内核的亲和性?

【问题讨论】:

那么,没人回答这个问题吗?这是怎么回事? 【参考方案1】:

获取最高节点的索引:

auto highestnode = 0UL;
GetNumaHighestNodeNumber(&highestnode);

要获得一个节点上所有逻辑核心的亲和性,最多可以有 64 个逻辑核心:

auto mask = 0ULL;
GetNumaNodeProcessorMask(nodeindex, &mask);

设置线程亲和性:

SetThreadAffinityMask(GetCurrentThread(), mask);

或者对于超过 64 个总逻辑核心:

auto node = static_cast<PGROUP_AFFINITY>(malloc(sizeof(PGROUP_AFFINITY)));;
GetNumaNodeProcessorMaskEx(nodeindex, node);

节点的掩码是nodes->Mask。

超过64个逻辑核心的大节点会被分成nodes->Group指定的组。

【讨论】:

以上是关于如何在 Windows 上将 c++11 线程关联设置为 NUMA 节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 10 上将代理配置到 GitBash 环境中

如何在 Windows 10 上将 Xdebug 3 连接到 PhpStorm?

Ghostscript:如何在 Windows 上将 PDF 与通配符合并

MinGW:如何在 Windows 上将 GCC/G++ 升级到版本 5?

我应该在 Windows 上将 Eclipse 安装到哪个文件夹?

在 Windows 上将 ^C 发送到 Python 子进程对象