windows平台对NUMA的支持

2023-11-16

 

微软官网链接:https://docs.microsoft.com/en-us/windows/win32/procthread/numa-support

 

译文如下:

        多处理器支持的传统模型是对称多处理器(SMP)。在这种模型中,每个处理器对内存和输入/输出有平等的访问权。随着处理器数量的增加,处理器总线成为系统性能的一个限制。

        系统设计人员使用非均匀内存访问(NUMA)来提高处理器速度,而不增加处理器总线上的负载。体系结构是不统一的,因为每个处理器靠近内存的某些部分,而远离内存的其他部分。处理器可以快速访问它附近的内存,而访问更远的内存可能需要更长的时间。

        在NUMA系统中,中央处理器被安排在称为节点。每个节点都有自己的处理器和内存,并通过高速缓存相关的互连总线连接到更大的系统。

        系统试图通过在处理器上调度线程来提高性能,这些处理器与正在使用的内存在同一个节点上。它试图满足节点内部的内存分配请求,但在必要时会从其他节点分配内存。它还提供了一个应用程序接口,使应用程序可以使用系统的拓扑结构。通过使用NUMA函数优化调度和内存使用,您可以提高应用程序的性能。

        首先,您需要确定系统中节点的布局。要检索系统中编号最高的节点,请使用getnumahighetestnodeNumber功能。请注意,这个数字不能保证等于系统中的节点总数。此外,具有序列号的节点不能保证靠得很近。要检索系统上的处理器列表,请使用GetProcessAffinityMask功能。您可以使用来确定列表中每个处理器的节点getnumapprocessornode功能。或者,要检索节点中所有处理器的列表,请使用GetNumaNodeProcessorMask功能。

        在确定了哪些处理器属于哪些节点之后,您可以优化应用程序的性能若要确保进程的所有线程都在同一个节点上运行,请使用SetProcessAffinityMask函数使用指定同一节点中的处理器的进程相似性掩码。这提高了线程需要访问相同内存的应用程序的效率。或者,要限制每个节点上的线程数,请使用SetThreadAffinityMask功能。

        内存密集型应用程序需要优化它们的内存使用。若要检索节点可用的可用内存量,请使用GetNumaAvailableMemoryNode功能。这VirtualAllocExNuma函数使应用程序能够为内存分配指定一个首选节点VirtualAllocExNuma不分配任何物理页面,因此无论页面是否在该节点或系统中的其他地方可用,它都将成功。物理页面是按需分配的。如果首选节点的页面不足,内存管理器将使用其他节点的页面。如果内存被换出,当它被带回来时,使用相同的过程。

NUMA支持超过64个逻辑处理器的系统

        在具有64个以上逻辑处理器的系统上,节点被分配给处理器组根据节点的容量来确定。节点的容量是系统启动时存在的处理器数量,以及系统运行时可以添加的任何其他逻辑处理器。

Windows Server 2008、Windows Vista、Windows Server 2003和Windows XP:不支持处理器组。

        每个节点必须完全包含在一个组中。如果节点的容量相对较小,系统会将多个节点分配给同一个组,选择物理上彼此靠近的节点以获得更好的性能。如果一个节点的容量超过了一个组中处理器的最大数量,系统会将该节点分成多个较小的节点,每个节点都小到足以容纳一个组。

        可以使用请求新进程的理想NUMA节点进程线程属性首选节点创建流程时的扩展属性。像线程理想处理器一样,理想节点是对调度器的一个提示,调度器在可能的情况下将新进程分配给包含所请求节点的组。

        扩展的NUMA函数GetNumaAvailableMemoryNodeEx,getnumanodeproprocessormaskex,getnumapprocessornodeex,和GetNumaProximityNodeEx与未扩展的对应节点的不同之处在于节点号是aUSHORT值而不是UCHAR,以容纳具有超过64个逻辑处理器的系统上可能更多的节点。此外,由扩展功能指定或检索的处理器包括处理器组;未扩展函数指定或检索的处理器是组相关的。有关详细信息,请参见单个函数参考主题。

        群组感知应用程序可以使用相应的扩展NUMA函数,以类似于本主题前面所述的方式将其所有线程分配给特定节点。应用程序使用GetLogicalProcessorInformationEx获取系统上所有处理器的列表。请注意,除非将进程分配给单个组,并且目标节点位于该组中,否则应用程序无法设置进程关联掩码。通常应用程序必须调用SetThreadGroupAffinity将其线程限制在预期的节点上。

NUMA原料药

下表描述了NUMA空气污染指数。

NUMA原料药
功能 描述
allocateuserserphysicalpagesunuma 分配要在任何中映射和取消映射的物理内存页面地址窗口扩展(AWE)指定进程的区域,并为物理内存指定NUMA节点。
CreateFileMappingNuma 为指定文件创建或打开命名或未命名的文件映射对象,并为物理内存指定NUMA节点。
GetLogicalProcessorInformation 检索有关逻辑处理器和相关硬件的信息。
GetLogicalProcessorInformationEx 检索关于逻辑处理器和相关硬件的关系的信息。
GetNumaAvailableMemoryNode 检索指定节点中的可用内存量。
GetNumaAvailableMemoryNodeEx 检索指定为的节点中的可用内存量USHORT价值。
getnumahighetestnodeNumber 检索当前具有最高数目的节点。
GetNumaNodeProcessorMask 检索指定节点的处理器掩码。
getnumanodeproprocessormaskex 检索指定为的节点的处理器掩码USHORT价值。
getnumapprocessornode 检索指定处理器的节点号。
getnumapprocessornodeex 将节点号检索为USHORT指定处理器的值。
GetNumaProximityNode 检索指定邻近标识符的节点号。
GetNumaProximityNodeEx 将节点号检索为USHORT指定邻近标识符的值。
MapViewOfFileExNuma 将文件映射视图映射到调用进程的地址空间,并为物理内存指定NUMA节点。
VirtualAllocExNuma 在指定进程的虚拟地址空间中保留或提交一个内存区域,并为物理内存指定NUMA节点。

 

QueryWorkingSetEx函数可用于检索分配了页面的NUMA节点。如需范例,请参阅从NUMA节点分配内存

从NUMA节点分配内存

多处理器

处理器组

 

总结:

根据文中描述,以及编码实验,处理器组结构图,如下所示:

 


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows平台对NUMA的支持 的相关文章

  • 编写递归算法,计算二叉树叶子结点的数目。

    编写递归算法 计算二叉树叶子结点的数目 编写递归算法 计算二叉树叶子结点的数目 include stdio h 包含 getchar scanf printf include malloc h malloc 动态申请空间 函数 二叉树 结点
  • C/C++中浮点数格式学习——以IEEE75432位单精度为例

    这是浮点数的通常表示形式 在IEEE754中 单精度浮点数有如下形式 32位单精度 单精度二进制小数 使用32个比特存储 1 8 23位长 S Exp Fraction 31 30至23偏正值 实际的指数大小 127 22至0位编号 从右边
  • 无法打开源文件<sys/time.h>,但是用time.h编译就会出错,缺少gettimeofday()

    因为sys time h是uinx系统下的库文件 而现在使用的平台是在windows 由于未指明程序运行的系统 导致找不到对应的头文件 需要重新实现gettimeofday 函数 define WIN32 include
  • GDAL多光谱与全色图像融合简单使用

    目录 简述 C 代码 效果对比 GDAL融合效果和原始多光谱波段对比 GDAL融合效果和原始全色波段对比 ARCGIS融合效果与原始全色和多光谱对比 GDAL融合效果与ArcGIS融合效果对比 简述 最近在GDAL的代码中看见了gdalpa
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • vector,list,deque区别

    http blog csdn net renkaihao article details 6803866 vector和built in数组类似 它拥有一段连续的内存空间 并且起始地址不变 因此它能非常好的支持随即存取 即 操作符 但由于它
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • ATL字符串转换宏

    有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏 你相信吗 头文件 d program files microsoft visual studio 8 vc atlmfc include
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • floor(),ceil()函数

    地板 天花板函数 均包含在math h中 意思分别为 返回不大于形参的最小整数和不小于形参的最大整数 include
  • Trace Function Enter, Exit and Leave

    http developer nokia com community wiki Trace Function Enter Exit and Leave
  • 手把手教你如何写一个三子棋/N子棋的小游戏

    这里写目录标题 第一步 游戏进入界面 第二步 初始化棋盘 第三步 打印棋盘 第四步 玩家和电脑下棋 第五步 判断输赢 三子棋或者N子棋怎么写 让我们先来玩一把 再来看看怎么写 程序运行界面 1为玩游戏 2为清屏 0为退出游戏 我们选1 然后
  • C 语言教程:数据类型和格式说明符

    C 语言中的数据类型 C 中的变量必须是指定的 数据类型 并且您必须在 printf 函数中使用 格式说明符 来显示它 创建变量 int myNum 5 整数 没有小数点 float myFloatNum 5 99 浮点数 char myL
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++常见STL容器基本用法

    1 vector include
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c
  • 如何强制两个进程在同一个CPU上运行?

    Context 我正在编写一个由多个进程组成的软件系统 它是在Linux下用C 编写的 它们之间使用 Linux 共享内存进行通信 通常 在软件开发中 性能优化是在最后阶段进行的 在这里我遇到了一个大问题 该软件对性能要求较高 但在 4 或
  • 在 OS X 上的 virtualenv 中安装 scrapy 加密时发生错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在安装 scrapypip in virtualenv on OS X 10 11 当它安装密码学时 它说 buil
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num

随机推荐

  • 深入浅出的讲解傅里叶变换

    作 者 韩 昊 知 乎 Heinrich 微 博 花生油工人 知乎专栏 与时间无关的故事 谨以此文献给大连海事大学的吴楠老师 柳晓鸣老师 王新年老师以及张晶泊老师 转载的同学请保留上面这句话 谢谢 如果还能保留文章来源就更感激不尽了 其实学
  • Ubuntu 安装 CUDA(附测试)

    为深度学习所用 博主预想在Ubuntu16 04上安装 显卡驱动 CUDA cuDNN Tensorflow gpu Keras PyCharm 参考了众多资料 最终成功将所有软件安装完毕 且能成功运行使用 该篇博客介绍了CUDA的安装教程
  • 2023-详解实时数仓建设

    一 实时数仓建设背景 1 实时需求日趋迫切 目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切 需要实时数仓的能力来赋能 传统离线数仓的数据时效性是 T 1 调度频率以天为单位 无法支撑实时场景的数据需求 即使能将调度频率设置成
  • 接口优化从哪些方面入手?

    关注公众号 1024个为什么 及时接收最新推送文章 1 背景 新接手的一个服务 对整个服务熟悉后 发现调用量 TOP1 的一个接口 完全超乎我对这个接口使用场景的预期 预期几万的接口 实际调用量近 400万 和调用方交涉后 暂时无法推动调用
  • Conexant Bt878驱动及视频软件开发

    目录 1 前言 2 驱动开发 3 视频软件开发 3 1 DX SDK版本选择 3 2 directshow开发 4 寄存器配置 5 参考资料 1 前言 本文是对基于Conexant Bt878进行的驱动开发和软件开发进行的整理论述 驱动是基
  • java项目如何远程调试

    唠嗑部分 很多java开发的小伙伴不知道java项目如何远程调试 每次出现环境问题都会十分纠结 只能在源代码中通过一行一行的日志去排查 即没有技术含量也浪费时间 今天来说一说 java项目如何远程debug Java XDebug 远程de
  • <微机与接口技术>51单片机的指令系统——数据传送与交换指令

    重要指令符号 Rn 当前工作寄存器组中的R0 R7 Ri 当前工作寄存器组中的R0 R1 rel 相对偏移量 在相对转移指令中使用 位一字节补码 寻址方式 七种分别是立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
  • 超详细的springBoot学习教程

    springBoot学习 https docs spring io spring boot docs 2 2 6 RELEASE reference html index html 官方文档 1 搭建springBoot项目架构 2 spr
  • C#执行JavaScript脚本

    目录 安装和配置 执行 JavaScript 脚本 与脚本交互 JS 调用 C 方法 多线程使用 总结 ClearScript 是一个 NET 平台下的开源库 用于在 C 和其他 NET 语言中执行脚本代码 它提供了一种方便和安全的方法来将
  • Windows操作系统知识合集

    Windows操作系统的权限 Guest权限 User权限 人类可用普通权限 Administrator 人类可用最高权限的用户 System 系统 机器可用最高权限 比人类权限高更多 TrustInstaller 操作系统的最高权限 比S
  • Aggressive cows-疯牛POJ(2456)-详解

    描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000 000 但是 John的C 2 lt C lt N 头牛们并不喜欢这
  • verilog-mode的简要介绍

    verilog mode是什么 官网的介绍 https www veripool org wiki verilog mode Verilog mode el is the extremely popular free Verilog mod
  • 静态代理模式

    1 所谓的静态代理模式应该就是把大家都会做的相同的事情交给代理去做 2 而一定要自己做的事就在代理中传入一个自己的对象再在代理的类中的该方法中调用自己的方法 3 将所有需要自己完成的方法放在一个接口中然后自己和代理都去继承他 代理还会添加一
  • invalid resource directory name

    遇到错误 当有res navigation的时候 反编译打包回apk的时候会报错 invalid resource directory name res navigation 或者是 invalid resource directory n
  • 【CV】第 15 章:结合计算机视觉和 NLP 技术

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • pc微信禁止启动小程序

    场景 最近 Windows 微信的更新了可以访问小程序的功能 但还不完善 如 尝试播放激励视频时 会直接跳过视频并作为已完成处理等 身为开发者的我们可能需要做一些处理 禁止pc的微信访问小程序 以达到减小损失的目的 提要 App onLau
  • Google Cast(Chromecast)浏览器 SDK 学习笔记(一)

    前几天因为京东打折 买了个索尼的 SRS X77 音箱 看说明书说支持 Google Cast 试了试感觉还挺好用 于是研究了一下 Google Cast 的 SDK Chromecast Google Cast 傻傻分不清楚 Google
  • Python迭代器及其用法

    列表 list 元组 tuple 字典 dict 集合 set 这些序列式容器有一个共同的特性 它们都支持使用 for 循环遍历存储的元素 都是可迭代的 因此它们又有一个别称 即迭代器 从字面来理解 迭代器指的就是支持迭代的容器 更确切的说
  • Umi4各种运行报错排查

    使用 Umi4 搭建项目 选择antd pro模版 pnpm 运行起来以后VScode编译器中出现报红 但是项目正常运行 现在强迫症处理各种报红 如果有用请点个赞 o 1 Cannot find module umi or its corr
  • windows平台对NUMA的支持

    微软官网链接 https docs microsoft com en us windows win32 procthread numa support 译文如下 多处理器支持的传统模型是对称多处理器 SMP 在这种模型中 每个处理器对内存和