频道栏目
读书频道 > web开发 > .NET > C#并行编程高级教程:精通.NET 4 Parallel Extension
1.2 理解硬件线程和软件线程
2012-07-08 21:42:37     我来说两句
收藏   我要投稿
本书旨在帮助有经验的C#开发人员能够利用.NET Framework 4中引入的Parallel Extensions,将现代微处理器中的多核处理能力转换为应用程序的性能。无论您是刚刚开始从老的多线程模型开始转换,还是已经有过一些...  立即去当当网订购
多核微处理器带有一个以上的物理内核(physical core)——物理内核是真正独立的处理单元,多个物理内核使得多条指令能够同时并行地运行。为了充分发挥多物理内核的功效,有必要运行多个进程,或者在一个进程内运行多个线程,创建多线程的代码。
 
然而,每一个物理内核可能会提供多个硬件线程,也称为逻辑内核或逻辑处理器。使用了Intel Hyper-Threading Technology(超线程计技术,HT或HTT)的微处理器在每一个物理内核上提供了多份架构状态。例如,很多带有4个物理内核并使用了HT技术的微处理器在每一个物理内核上提供两份架构状态,从而获得8个硬件线程。这种技术称为对称多线程(simultaneous multithreading,SMT),它通过额外的架构状态在微处理器的指令级别对并行执行进行优化和增强。SMT并不局限于每物理内核两个硬件线程;例如,有的微处理器的物理内核上有4个硬件线程。需要注意,一个硬件线程并不代表一个物理内核。在某些情形下,SMT可以提升多线程代码的性能。后面的章节会列举一些这种性能提升的示例。
 
Windows中每个运行的程序都是一个进程(process)。每一个进程会创建并运行一个或多个线程,这些线程称为软件线程(software thread),用于区分前面提到的硬件线程。一个进程至少有一个线程,称为主线程(main thread)。操作系统的调度器在所有要运行的进程和线程之间公平地分享可用的处理资源。Windows调度器会给每一个软件线程分配处理时间。当Windows调度器运行在多核微处理器上时,调度器必须从物理内核支持的硬件线程中分配时间给每一个需要运行指令的软件线程。打一个比方,可以将每一个硬件线程想象为一条泳道,而将软件线程想象为游泳者。

Windows将每一个硬件线程识别为一个可调度的逻辑处理器。每一个逻辑处理器可以运行软件线程的代码。运行了多个软件线程的进程可以充分发挥硬件线程和物理内核的优势,并行地运行指令。图1-4展示了运行在物理内核上的硬件线程上的软件线程。Windows调度器可以决定将一个软件线程赋给另一个硬件线程,通过这种方式均衡每一个硬件线程的工作负载。由于通常都有很多其他软件线程在等待处理时间,因此,负载均衡机制能够合理组织有效的资源,让其他线程也有机会运行各自的指令。图1-5展示了Windows Task Manager正在显示8个硬件线程(逻辑内核和工作负载)。

 

 

 

 



Core Parking是一项Windows内核电源管理和内核调度技术,设计这一项技术的目的是为了增强多核系统上的能源功效。Core Parking可以不断地跟踪每一个硬件线程相对于其他硬件线程的工作负载,并能决定将某些硬件线程进入睡眠模式。
 
Core Parking技术能够根据工作负载动态调节正在使用的硬件线程的数目。当一个硬件线程的工作负载低于某一个阈值时,Core Parking算法会通过暂停系统中的一些硬件线程的方式减少硬件线程数目。为了使得这个算法高效,在调度软件线程的时候,内核调度器会给未暂停的硬件线程分配较高的优先级。内核调度器会试图让暂停的硬件线程闲置,这样就可以将它们转到低功耗的闲置状态了。
 
在包含HT技术的微处理器系统中,Core Parking会智能地将任务在线程之间进行调度,而这些线程运行在同一个物理内核中的多个硬件线程上。这种调度决策可以降低电源消耗。
 
Windows Server 2008 R2支持完整的Core Parking技术。不过,Windows 7也采用了Core Parking算法和基础结构,用于在包含HT技术的微处理器上均衡硬件线程的处理器性能。图1-7展示的 Windows Resource Monitor显示了8个硬件线程的活动,其中有4个硬件线程暂停了。
 
无论有多少个暂停的硬件线程,.NET Framework 4的函数所返回的硬件线程数仍然是总硬件线程数,而不仅仅是未暂停的硬件线程数。Core Parking技术并没有限制进程运行软件线程的硬件线程数。
 
在某些特定的工作负载下,如果工作负载很低,那么带有8个硬件线程的系统可以将自己转变为带有两个硬件线程的系统,然后再根据需要启用保留的硬件线程。某些情况下,在调度大量试图并行地运行代码的软件线程的时候,Core Parking可能会引入额外的延迟。因此,在测量并行性能时,一定要考虑可能带来的延迟
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.1.2 并行程序设计和多核程序设计
下一篇:1.3 理解Amdahl法则
相关文章
图文推荐
排行
热门
最新书评
文章
下载
读书
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站