如何在 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?