[Windows编程] Windows 7 对多核的支持

浅谈Windows 上的线程亲和性(Thread affinity) 由浅入深,从不同系统、C++语言、Windows对资源调度管理等多个层面阐述了线程亲和性的由来、使用,并附带了Raymond Chen的《Thread affinity of user interface objects》系列的翻译。 阅读详情

Windows 7 和 Windows Server 2008 R2 一个重要更新是增强了对多核的支持。 现已可以支持超过64个逻辑处理器(也就是所谓的“核”),并且引入了NUMA 技术, 大幅度提高多核运算的性能。

 

传统的多核运算是使用SMP(Symmetric Multi-Processor )模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统有时也被称为一致存储器访问(UMA)结构体系,一致性意指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。

 

NUMA模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

 

在开发Windows7 上的多线程程序的时候, 应该把进程内所有的线程都安排到同一个节点,可以大大提高性能。 新的Windows 7 API 函数 SetProcessAffinityMask  可以实现这个功能。

 

如果你的程序使用内存比较频繁, 应该在进程所在节点的本地存储器空间分配内存,以避免跨节点存储器访问的开销。 Windows API VirtualAllocExNuma  可以实现这个功能。

 

以下是Windows 7/ WIndows Server2 2008R2 新增加的多核支持API函数:

 

CreateRemoteThreadEx
Creates a thread that runs in the virtual address space of another process and optionally specifies extended attributes such as processor group affinity.

GetActiveProcessorCount
Returns the number of active processors in a processor group or in the system.

GetActiveProcessorGroupCount
Returns the number of active processor groups in the system.

GetCurrentProcessorNumberEx
Retrieves the processor group and number of the logical processor in which the calling thread is running.

GetLogicalProcessorInformationEx
Retrieves information about the relationships of logical processors and related hardware.

GetMaximumProcessorCount
Returns the maximum number of logical processors that a processor group or the system can support.

GetMaximumProcessorGroupCount
Returns the maximum number of processor groups that the system supports.

GetNumaAvailableMemoryNodeEx
Retrieves the amount of memory that is available in the specified node as a USHORT value.

GetNumaNodeNumberFromHandle
Retrieves the NUMA node associated with the underlying device for a file handle.

GetNumaNodeProcessorMaskEx
Retrieves the processor mask for the specified NUMA node as a USHORT value.

GetNumaProcessorNodeEx
Retrieves the node number of the specified logical processor as a USHORT value.

GetNumaProximityNodeEx
Retrieves the node number as a USHORT value for the specified proximity identifier.

GetProcessGroupAffinity
Retrieves the processor group affinity of the specified process.

GetProcessorSystemCycleTime
Retrieves the cycle time each processor in the specified group spent executing deferred procedure calls (DPCs) and interrupt service routines (ISRs).

GetThreadGroupAffinity
Retrieves the processor group affinity of the specified thread.

GetThreadIdealProcessorEx
Retrieves the processor number of the ideal processor for the specified thread.

QueryIdleProcessorCycleTimeEx
Retrieves the accumulated cycle time for the idle thread on each logical processor in the specified processor group.

SetThreadGroupAffinity
Sets the processor group affinity for the specified thread.

SetThreadIdealProcessorEx
Sets the ideal processor for the specified thread and optionally retrieves the previous ideal processor.

以下是新的线程池 API 函数


QueryThreadpoolStackInformation
Retrieves the stack reserve and commit sizes for threads in the specified thread pool.

SetThreadpoolCallbackPersistent
Specifies that the callback should run on a persistent thread.

SetThreadpoolCallbackPriority
Specifies the priority of a callback function relative to other work items in the same thread pool.

SetThreadpoolStackInformation
Sets the stack reserve and commit sizes for new threads in the specified thread pool.

 

 

 >> 原创文章的版权属于作者,转载请注明出处和作者信息(http://blog.youkuaiyun.com/WinGeek/), 谢谢。 <<

<Zhuuu_ZZ>HIVE(十一)函数 Hive内置函数一 Hive函数分类二 字符函数二 类型转换函数和数学函数三 日期函数四 集合函数五 条件函数六 聚合函数和表生成函数6.1 聚合函数6.2 表生成函数:输出可以作为表使用 一 Hive函数分类 从输入输出角度分类 标准函数:一行数据中的一列或多列为输入,结果为单一值 聚合函数:多行的零列到多列为输入,结果为单一值 表生成函数:零个或多个输入,结果为多列或多行 从实现方式分类 内置函数 自定义函数 UDF:自定义标准函数 UDAF:自定义聚合函数 UDTF:自定义表生成函数 阅读详情

相关推荐

在winXP下返回当前线程所在CPU(多核)的方法

在vista  win2003  win7(函数略有不同)中,都有专门的api返回当前线程所在的cpu,但xp下就没有,只能自己搞。一下是在国外一网站上找的自己写的函数来实现这一功能:(注:vista  win2003 的api是GetCurrentProcessorNumber()   win7是GetCurrentProcessorNumberEx() ) GetCurrentPr

zsl_oo7的专栏 2030

windows下设置线程亲和性(支持大于64核)

设置线程亲和性,通俗的说法就是将线程绑定到cpu上某一个或多个核上,此处的核是指逻辑核心,非物理核心。 物理核心与逻辑核心的关系,如果开启超线程,一般逻辑核心数=物理核心数*2。 一、SetThreadAffinityMask 微软帮助: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadaffinitymask 函数定义如下: DWORD_PTR SetThreadAffinityMask(HAND

百里杨的博客 1万+

VS2010简介

今天参加微软组织的VS2010 Launch Event Train-The-Trainer Traning,Brian A. Randell同学讲的眉飞色舞、demo的激情澎湃,我却听的懵懵懂懂:( 听听课,才发现自己的知识落伍太多了。还没研究过WPF到底是怎么回事儿,现在Silverlight已经大行其道。没做过Web方面的开发,现在Cloud又火得不行。SharePoint & Of

Thinking in ... 2万+

Windows NUMA编程实践 – 处理器组、组亲和性、处理器亲和性及版本变化

1. 自Win7引入处理器组开始,原有的不识别group的函数,参数和返回值都变成组内编号/信息。2. 自Win10 20348 由于node可以关联多个group,引入“主组”之后,原有的node相关不支持多个group的函数,参数和返回值都变成主组信息。

m 3010

openEuler 22.03 安装及配置Gitlab容器

在 openEuler 22.03 上安装及配置Gitlab容器

轻步玉阶 3314

信噪比(Signal-to-Noise Ratio, SNR)详细介绍

信噪比(Signal-to-Noise Ratio,SNR)是衡量信号质量的重要参数,表示有用信号的功率与背景噪声功率的比值。其中,\( P_{\text{signal}} \) 表示信号功率,\( P_{\text{noise}} \) 表示噪声功率。- 音频处理:在音频设备和录音系统中,SNR决定了音质的好坏,高SNR表示音频信号更清晰,噪声更少。- 低SNR:信号中噪声成分较大,接收端难以分辨有用信号和噪声,可能导致误码率高,通信质量差。SNR定义为信号功率与噪声功率之比,通常用分贝(dB)表示。

qq_58860480的博客 8万+

今天安装了Microsoft Visual Studio 2010 Ultimate RC 多图

淘宝购买地址: http://item.taobao.com/auction/item_detail.jhtml?item_id=fe8530d27ecafab1dbf7cbad6fa4cb8e&x_id=0db12月8日,微软完成了RC候选版本,并向MSDN订阅用户提供。RC版在Beta 2的基础上解决了存在的性能问题,比如虚拟内存使用,对整体速度和功能进行了完善。继开放给MSD...

测试 356

大模型面试题34:Transformer的Encoder和Decoder区别与协作

Encoder:双向自注意力,专注理解输入,输出语义特征;Decoder:掩码自注意力+编码器-解码器注意力,专注生成输出,实现语义对齐。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 813

多核应用编程实战

《多核应用编程实战》 基本信息 原书名:Multicore application programming:for windows,linux,and Oracle Solaris 作者: (美)戈夫(Darryl Gove) 译者: 郭晴霞 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115317506 上架时间:2013-5-22 出版日期:2013...

weixin_33739541的博客 248

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 304

ollama如何在自己的服务器上跑Qwen3(小白必看)

在国内下载ollama最新安装包时,使用curl -fsSL https://ollama.com/install.sh | sh命令可能会遇到网络问题导致下载进度停滞。为了解决这一问题,可以通过国内的镜像源进行下载,例如使用modelscope社区提供的最新ollama镜像仓库。具体步骤包括:首先通过pip install modelscope安装modelscope,然后使用modelscope download命令下载ollama-linux镜像,接着进入下载目录并赋予安装脚本执行权限,最后运行安装脚

Ven%的博客 756

linux与windows对多核的支持,多核操作系统发展综述..doc

多核操作系统发展综述..doc多核操作系统发展综述1引言多核处理器的出现大大提升了系统并行处理能力,使越 来越多不同类型的应用可以同时在多核平台上进行高效的 并行计算。现有成熟的操作系统经过长期的发展,对目前普 通多核处理器大多能够提供较好的支持。但同时,多核处理 器的核数迅速增长、结构日益复杂,也为未来多核操作系统 的设计与优化带来了巨大的挑战。如何适应未来多核处理器 的迅速发展,设计高可用、高...

weixin_29879257的博客 733

华为 MetaERP 财务模块的核心业务对象,按子模块与架构维度分类,以表格呈现,适配架构设计与实施落地

华为MetaERP财务模块基于4A架构(业务/应用/数据/技术)与TOGAF框架,实现业财一体化与全球合规。业务架构涵盖组织模型与核心流程,应用架构支撑财务操作,数据架构确保数据一致性,技术架构提供高性能技术底座。模块覆盖总账、应收应付、资产等子模块,支持多组织、多币种、多准则核算,通过实时会计引擎实现"交易即核算"。4A架构与TOGAF框架对应,实现业务能力、应用组件、数据模型与技术栈的深度融合,为华为全球化财务核算提供核心支撑。

金牌架构师 439

nt实验报告之多核环境下OpenMP并行编程

多核环境下OpenMP并行编程 文章目录多核环境下OpenMP并行编程一、实验环境二、实验内容三、实验目的四、实验步骤4.1 Windos下编译并运行OpenMP程序4.1.1 环境配置4.1.2 代码4.1.3 运行结果4.2 Linux平台上编译和运行OpenMP程序4.2.1 环境配置:4.2.3 运行结果4.3 多线程实现矩阵乘法4.3.1 TimeCalculate() 计时函数4.3.2 Matrix 矩阵类和矩阵乘法4.3.3 并行实现多次矩阵乘法4.3.4 并行实现单次大矩阵乘法五、性能分析

一只小陀螺的博客 2768

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3137

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 982

newLISP 多核编程

newLISP实现了Cilk API, 可以将多个同时运行的进程执行在多处理器或者多核的CPU架构上,已达到并行节省运行时间的目的。使用spawn和sync函数可以很快的实现。下面是来自newLISP官方文档的例子:#!/usr/bin/newlisp ; calculate primes in a range (define (primes from to) (local (plist)

Dean Chen的专栏 3288

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
下一篇: [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
西塞安全
博客等级 码龄20年 980粉丝 164原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值