`
izuoyan
  • 浏览: 9222989 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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.csdn.net/WinGeek/), 谢谢。 <<

分享到:
评论

相关推荐

    Intel多核多线程编程基础(windows)

    多核处理器支持并行执行,而多线程编程则可以实现任务的并发执行,两者结合可以显著提升程序的性能和效率。 ### 设计概念 在设计多线程应用时,开发者需要考虑线程间的同步和通信机制,以避免竞态条件、死锁等问题...

    windows下多核多线程编程

    在Windows操作系统中,多核多线程编程是提高程序并行性和效率的重要手段。通过创建和管理多个线程,可以在多核处理器上并发执行任务,从而充分利用硬件资源,提升程序性能。本文将深入探讨如何在Windows环境下进行多...

    linux/windows openmp 多核编程资料

    里面包含很多LINUX下与WINDOWS下使用多线程进行多核编程的示例,并且使用openmp对串行代码进行并行化进行了介绍。里面还谈及了很多多线程并行编程的概念及如何有效地使用多线程提高程序运行速率,作了相当清晰的介绍...

    多线程与多核编程入门

    在《多线程与多核编程.pdf》这份文档中,可能会详细介绍以上概念,并给出实际编程示例,包括如何在不同编程环境下(如Windows、Linux或Unix系统)创建和管理线程,以及如何利用OpenMP编写并行程序。此外,文档可能还...

    Windows 7高级编程 中英文完整版 pdf

    《Windows 7高级编程》是美国作者John Paul Mueller的一部技术专著,全面深入地探讨了在Windows 7操作系统上进行高级程序开发的各个方面。这本书的中英文完整版为程序员和软件开发者提供了丰富的学习资源,无论是对...

    多核并行编程windows_编程技术.doc

    此外,要充分发挥超线程的效能,还需要合适的主板芯片组(如Intel的i865PE和i875P及更新型号)以及支持超线程的操作系统(如Windows XP、Vista和7)。 在多核处理器时代,开发人员可以利用并行编程技术来提升程序...

    多线程与多核编程.pdf

    ### 多线程与多核编程 #### 13.1 进程与线程 **13.1.1 进程与多任务** 进程是操作系统中的一个重要概念,指的是正在执行中的程序。在现代多任务操作系统中,可以同时运行多个程序。进程包含了程序在内存中的所有...

    Windows应用高级编程C编程篇 Windows应用高级编程C编程篇

    C#作为.NET框架的一部分,提供了更现代、面向对象的方式来实现这些功能,但它也建立在C语言的传统之上,因此C编程的知识对理解C#在Windows环境中的工作原理至关重要。 在Windows应用编程中,开发者需要了解以下关键...

    多核编程小程序,多核程序

    在IT领域,多核编程是优化程序性能的关键技术,它允许程序同时利用多个处理器核心,实现并发执行。本文将深入探讨多核编程中的线程概念、线程创建以及线程管理,结合给出的代码实例进行解析。 首先,线程是操作系统...

    windows_编程技术

    在Windows编程技术领域,开发者需要掌握一系列核心概念和技能,以创建高效且用户友好的应用程序。以下是对压缩包中文件内容的详细概述: 1. **24数据库编程(windows_编程技术).doc**:这份文档可能涵盖了如何在...

    多核编程实战

    比较全面的介绍多线程编程和多核CPU下编程技巧,包括多核CPU的硬件介绍、高性能编码、程序的并行设计和注意事项、Windows多线程编程、OpenMP编程等。Darryl Gove著的书籍

    中山大学信科院WindowsMFC编程课件完整版

    中山大学信科院Windows编程课件完整版 01绪论 02MFC基础 03界面编程1-菜单 04界面编程2-控制条 05界面编程3-对话框 06界面编程4-控件 07界面编程5-鼠标、键盘与光标 08GDI编程1-绘图 09GDI编程2—文字、位图...

    Windows编程体系讲义

    7. **异常处理**:Windows编程中,异常处理是处理错误和异常情况的重要手段,C++的try-catch语句是实现这一功能的关键。 8. **文件系统与I/O操作**:学习如何使用Windows API进行文件操作,包括打开、读取、写入和...

Global site tag (gtag.js) - Google Analytics