常见问题解答:英特尔® 多核处理器架构

 


常见问题解答:英特尔® 多核处理器架构

基本概念

多核架构迁移详解

如何从多核架构中获益

多线程编程面临的挑战

英特尔如何提供帮助

其它资源

常见问题解答为什么没有回答我的问题?

这份常见问题解答旨在突出 Intel.com 上公布的多核信息的子集,而不是一份综合指南,并未涵盖英特尔发布的所有与多核相关的资料。如欲了解在其它地方查找答案的方法,请参阅下一篇文章。如欲对这份常见问题解答提出更新建议,请联系支持部门,或者将与软件相关的多核问题直接张贴到在英特尔并行架构上进行线程编程讨论论坛。将问题张贴到英特尔® 开发人员专区论坛,不仅可以让社区从讨论中获益,更重要的是您能够从他人那里学到许多知识。

我在常见问题解答中没有找到问题的答案。接下来,我应该去哪里找答案呢?

首先搜索 Intel.cn。使用高级搜索时,就有可能搜索网站中关于软件开发的子集 (http://www.intel.cn/content/www/cn/zh/search.html)。另一种方法是使用谷歌搜索英特尔开发人员专区网站。为此,需将 site:software.intel.com 添加至谷歌搜索。然后搜索英特尔® 开发人员专区论坛。搜索框位于页面下方。如果还没有找到问题的答案,请将问题张贴到相关论坛,或者联系英特尔客户支持部门

我如何报告常见问题解答条目的状态变更情况?

随着英特尔继续在其各产品线中推广多核架构,而且开发人员越来越擅长编写多线程代码,所以这份常见问题解答将会过时而被废弃。如果您认为某个条目不再有效或者需要更新,请联系英特尔® 开发人员专区支持。开发人员社区感谢您为常见问题解答更新所做的努力。

一些与多核架构或线程编程无关的问题应该张贴或发送到哪里?

英特尔开发人员专区论坛是一个公开交流平台,供用户张贴关于英特尔软件开发产品、英特尔平台和技术以及其它话题的问题与答案。英特尔工程师会参与论坛讨论并答疑解惑。另一种方法是联系英特尔® 客户支持部门

返回目录


基本概念

什么是多核架构?

简单地讲,多核处理器架构可以让芯片设计工程师在单个处理器中集成两个或多个执行内核或计算引擎。多核处理器能够直接插入到一个处理器插槽。但是,操作系统会将它的每个执行内核看作独立的逻辑处理器,并为其分配相应的执行资源。多核芯片可以在每个时钟周期内完成更多的工作,以更低的频率运行,通过多种方式增强用户体验,例如改善计算和带宽密集型活动的性能。

多核架构与超线程技术有什么区别?

超线程技术允许多条线程共享内核资源,更加高效地利用单个执行内核,而多核架构可以提供两套或更多完整的执行资源,增加计算吞吐量。任何针对超线程技术进行线程化处理的应用在基于英特尔多核处理器的系统上运行时,都应该能够交付出色的性能。因此,在英特尔向多核架构迁移的早期,涵盖台式机处理器、移动处理器和服务器处理器产品系列,用户就可以利用许多针对两条线程优化的现有应用。多核架构并不意味着超线程技术的末日已经到来。相反,超线程技术可以为多核系统中的各个独立核心分配资源,进一步实现性能最大化。

多核架构对许可有何影响? 是否会增加软件许可成本? 如果是,将增加哪些应用、操作系统或数据库的许可成本?

软件许可由各软件厂商决定。作为软件的使用者和购买者,英特尔相信,它可以通过采购协商和决定影响许可模式。英特尔正在倡导行业继续延用与可衡量的软件使用和业务价值相结合的许可方式,迫使厂商在根据基础硬件进行软件许可时采取“按插槽”而非“按核心”的许可模式。

英特尔的战略是维护行业平台定价模式。英特尔认为,多核架构是超线程技术的逻辑演进,行业历来反对大幅增加总体解决方案(硬件和软件)成本。人们期待更快速、更便宜、更优质的产品。

值得庆幸的是,微软*、红帽等主要软件厂商同意英特尔的观点,并且已经宣布了按插槽进行许可的政策--将多核处理器看作一个 CPU。

对多核架构有负面影响吗? 应用运行速度会下降吗?

一般来讲,任何在英特尔单核处理器上运行的应用都能在英特尔多核处理器上运行。多核平台可以提供下一代性能、成本效益和业务价值。对于线程化应用,只会产生正面影响。不过,也有一些例外情况,例如线程化内存密集型应用,它的内存请求很容易超过内存子系统的容量,从而降低应用性能。英特尔知道,不是所有的应用--或者更准确地说,一个既定应用中的重要操作--都支持并行化或线程化。在这些情况下,开发人员应当鼓励客户寻找不同的使用或部署模式,利用更加出色的多任务处理能力,或者寻找更多解决方案特性或功能,利用更多核心。

返回目录

 


多核架构迁移详解

英特尔为什么在多个产品线中实施多核架构?

在过去四十年里,由于英特尔为研发工作做出的不懈努力,晶体管数量每隔几年就会翻一番。但是,由于一些不那么友好的物理规律,横向扩展不可能无限制地持续下去。一个 1993 年的英特尔奔腾处理器大约有 300 万个晶体管,而今天的英特尔® 安腾® 2 处理器有近 10 亿个晶体管。如果以这样的速度发展下去,英特尔处理器每平方厘米的散热量很快就会超过太阳表面--因此,散热问题给频率增加带来了硬性限制。2004 年,Technology@Intel Magazine 在一篇题为 Architecting the Era of Tera 的报道中描述了这些挑战以及功耗、内存延迟、阻容延时和标量性能等问题。[PDF 298KB]

尽管面临这些挑战,用户仍然需要更高的性能。今天,全球有超过 5 亿个电脑用户。家庭用户依赖电脑交付和创建富媒体内容,这给用于视频编辑的多媒体编解码应用带来新的要求。3D 建模、科学计算或高端数字内容创建软件的企业用户,对性能的要求越来越严格。在这两种情况下,因为用户通常需要执行多任务处理,在两个或更多应用之间不停切换,或者在有许多后台进程争用稀缺的处理器资源的环境中工作,所以性能不只是意味着更加充分地利用单个应用。

根据用户需要的内容和技术使用方式增强计算架构和平台,是英特尔的一贯承诺,而多核处理器就是英特尔为兑现这一承诺推出的又一项创新成果。英特尔相信,多核平台有助于开发新的应用,推动各个领域实现进步,从医疗到 IT,从数字办公到数字家庭,从移动解决方案到最新游戏。英特尔计划将多核平台的优势推广到所有目标细分市场:台式机和移动电脑,以及服务器和工作站。

英特尔对多核架构的信心有多坚定?

非常坚定。多核处理器功能是英特尔以平台为中心的方法的关键。公司将继续投资英特尔® 万亿级计算研究计划,力争将今天的多核进程向上扩展到拥有数十个甚至数百个计算能力高达万亿次的节能核心的设计。在 2006 年秋季英特尔® 开发人员论坛上,英特尔高级院士兼公司技术事业部总监 Justin Rattner 宣布,英特尔已经开发出了 80 核处理器,而且将继续研究解决数据流量、散热和延迟问题,确定这些芯片运行现有软件和操作系统的方法。在市场上,向多核架构的快速迁移很可能会带动软件向线程化和并行化的迁移。

返回目录


如何从多核架构中获益

 

如果我什么都不做,我能否从多核架构中获益? 如何获益? 抑或,我的应用性能会下降吗?

这些问题的答案因具体情况而异。由于英特尔在过去十年里为推动 SMP(对称多处理)和超线程技术的发展做出了不懈努力,现在大多数面向多处理器服务器的中间层和后端应用已经实现了高度线程化--具体来说,包括数据库、应用和 Web 服务器。对于这些应用,这个问题没有实际意义,尽管可能有机会提高线程编程性能和准确性。

因为多核处理器可以完全执行代码的多条线程,所以许多不同的使用模式有可能实现。一条线程可以从应用运行,另一条线程可以从操作系统运行。两个应用可同时执行。对并发工作负载进行虚拟化;或者隔离故障或实施故障切换。其它线程可用于处理后台应用,例如病毒防护、安全、压缩、加密和同步。多核处理器可以提高服务器整合效率。

但是,这些问题的答案依然是“因情况而异”。如果您什么都不做,非线程化应用肯定可以在多核处理器上运行。从本质上讲,一个非线程化应用或工作负载在多核处理器的一个核心上的性能,可以反映出它在具有同等时钟频率、高速缓存容量和架构以及前端总线和 I/O 功能的单核处理器上的性能。

如果您运行的是非线程化应用,那么它只能利用一个核心。当您对应用进行线程化处理时,操作系统和应用可以同时在多个核心上运行,应该可以提升处理速度。但是英特尔认为,实际性能提升情况并不容易预测。然而,英特尔的确强调说,从长远来看,依靠直线执行流显著改善应用性能的做法会逐渐失效。投资并行编程是当前及未来提升性能的有效途径。

是否有操作系统特别适合利用多核架构? 哪个(哪些)操作系统? 什么原因?

Mac OS X、Microsoft Windows Vista*、Windows Server*、Red Hat Linux* 和 Novell SuSE Linux* 等所有主要的操作系统都实现了线程化,可以利用超线程技术和现在的多核架构。而且,很长一段时间以来,一直有面向现有可扩展平台的广泛的操作系统支持。因此,任何支持 SMP 的操作系统都可以跨多个核心调度单个应用。现在,许多操作系统都可以支持多个核心,从 32 到 64 个不等。因此,操作系统支持不是障碍。

哪些应用适合从串行编程转变为多线程编程,在多核系统上体验性能提升?

线程编程相对普遍的应用类中的任何程序--视频编码、3D 渲染、视频/照片编辑和高性能计算/工作站应用。这些应用尤其适合线程级并行处理,因为它们的许多计算可以同时运行。

在游戏应用中,线程编程对于性能提升将会大有助益。

有些视频游戏厂商,包括 Remedy Entertainment、Valve、Epic Games 和 Ubisoft Entertainment,已经发布了热门游戏的多线程版本,并计划在将来继续推出采用线程编程的游戏应用,充分利用多核处理器。

例如,Valve 正在完善对多线程的全面支持,包括开源游戏引擎和开发人员工具。这家游戏公司的所有产品最终都将支持多核技术。Valve 还计划将多核技术向后迁移到以前的游戏版本。Valve 总裁兼联合创始人 Gabe Newell 向 Tech Report 表示,“四核将改变电脑游戏的各个方面。它将改变我们创建游戏的方式,提供服务的方式,以及设计游戏的方式。在过去几年里实现的图形可扩展性将会延伸到物理、AI、动画以及所有对解决游戏够漂亮但不够智能这一问题至关重要的系统。”

然而,英特尔强调,开发人员不应单从应用角度看待性能问题。不同的使用和部署模式,例如对于“如果我什么都不做,我能否从多核架构中获益?” (上文)和“除了使用线程化应用,最终用户什么时候可以在多核系统上体验性能提升?” (下文)等问题的答案,可以在多核环境中为最终用户带来同等或更出色的优势和体验。

除了使用线程化应用,最终用户什么时候可以在多核系统上体验性能提升?

多任务用户或那些在多背景处理环境下工作的用户也将受益于多核系统。幕后处理在商业计算环境下愈加常见。这些例子包括那些一边运行后台数据查询,一边在前台处理多任务的用户,或通过公司网络在后台更新软件、排除硬件故障或执行病毒扫描以及其它管理任务的公司 IT 部门。

返回目录


多线程编程面临的挑战

我一定要成为线程编程专家吗? 怎样才能成为线程编程专家?

如果一直在为多处理环境(例如企业的 IT 环境)开发应用,那么您或您的同事或许已经掌握了必要的技能。对于其他人而言,这大概是一次重要的行业转型,需要应用开发彻底向并行化转变。

实际上,所有主要的处理器芯片制造商都在向多核架构迁移。通过提升时钟频率增加直线指令吞吐量的日子正在渐渐结束。英特尔相信,现在积累线程编程专业知识将会给开发人员带来长期回报。在过去的十年间,英特尔与多家操纵系统和应用厂商合作,优化和增强了软件的线程编程功能。英特尔软件和解决方案事业部(SSG)线程编程支持计划(Threading Enabling Program )预示着超线程技术的问世。该计划通过进一步扩展,支持这种软件转型。英特尔软件和解决方案事业部提供线程编程工具、编译器和其它性能调优工具、白皮书和其它技术资源,帮助软件开发人员在代码中实施线程级并行性增强。参考英特尔如何提供帮助 (下文),了解更多信息。

线程编程应用需要我投入多少时间和精力?

合理警告:从并行性和线程编程角度考虑问题十分困难,尤其是对初级开发人员而言。线程化软件出错率与串行代码一样大。然而,还会出现其它一些问题。最常见的是“竞态条件”,即多条线程同时更新同一个内存位置,但是每条线程的执行顺序和时间会改变最终结果。另外,即使代码被适当线程化,也并不能总是在多核系统上以更快的速度执行。当线程被重新串行化时就会出现这种情况,因为多条线程共享一个资源,例如 I/O、内存或网络吞吐量。尽管存在这些挑战,英特尔依然可以提供适当的资源。例如,英特尔® 线程分析工具可以找到难以发现的线程编程错误和性能瓶颈,从而节省大量的时间。

如何判断我是否应该对应用进行线程编程?

决定是否应该对应用进行线程编程时,需要考虑以下几个方面。首先,正式将高度线程化应用设计确定为近期和长期目标,这一步很重要。为此,需要考虑应用处理变化的能力,通常是系统资源或数据集尺寸增加。将来可用核心数量有增无减,而且线程编程可以最大限度减少延迟,改善应用的可扩展性,以及提高代码的灵活性。相比从最早期的设计阶段开始使用本身支持多线程的架构,在产品架构更新中增加并行化功能需要的成本更高。根据未来多核硬件上的性能权衡完成应用创建所需的时间,您可以确定应用是否适合线程编程。

另外,还需要考虑一个既定软件可以支持多少个执行内核。如果应用是专门为支持一定数量的内核而构建的,那么一旦支持它的主流机器的内核数量明显超出了此上限,我们就极有可能需要对该应用重新进行设计。通过设置应用能够创建的可配置线程的数量上限,您可以在硬件演进过程中更改线程数量。

比较串行与并行应用的性能表现时,参照实际执行时间。批判性地分析哪些代码或操作可以并行运行,实现性能最大化。Epic Games 创始人兼总裁 Tim Sweeney 向 AnandTech 表示,当他的公司对产品进行多线程编程时,开发人员将精力全部集中到了物理、动画更新、渲染器的场景遍历循环、声音更新和内容流上。公司没有尝试高度连续和面向对象的多线程系统,例如游戏系统。Sweeney 补充说,“将多线程编程的工作重点放在引擎中具有自我约束能力和对性能要求十分苛刻的子系统上非常重要,因为这些子系统最有可能实现性能提升。您肯定不希望在多个线程上执行 150,000 行面向对象的游戏逻辑--从经济上讲,所有这些相互作用的综合复杂性超出了团队的管理能力。但是,如果您正在处理物理计算或动画更新,那么这个问题就会变得非常简单。”

其次,确定创建线程化工作负载需要开发人员投入多少时间和精力,描述并行化具体工作负载所面临的困难。工作负载可以被视为以下三种广泛定义的类型之一:

轻松线程化工作负载:意味着显而易见的线程编程模式,在所有工作负载中大约占 10% 到 20%。

线程化难度适中的工作负载:通过不懈努力可以实现并行化的工作负载,它们肯定可以实现性能提升,保护竞争优势,例如一些数据库应用、数据采掘、合成、文本和语音处理。这些任务在工作负载中占 60%。

非常难以线程化的工作负载:由于线性排列而很难实现并行化的工作负载,一个子任务的输入数据通常由另一个子任务的输出数据决定。对此类工作负载进行线程编程,必须从工作成本和技术复杂程度两个方面来认真考虑。

如果您的应用需要占用大量的网络资源,您还需要考虑应用 CPU 时间与网络时间之比,操作系统的网络堆栈是否已经实现并行化。详情请见英特尔网络研究科学家 Annie Foong 和英特尔网络软件工程师 Erik J. Johnson 联合编写的白皮书《网络堆栈并行化需求的批判性分析》。

上述问题得到解决之后,您需要考虑哪些工具和资源有助于提高速度或者简化多线程编程流程。英特尔开发人员专区上的多核线程编程开发人员社区提供几篇白皮书,包括《编写并行程序:多语言教程简介》详细介绍了不同符号的高级特征,以便编程人员明智地选择学习哪种符号。

英特尔是否认为每一个应用都应该进行线程编程呢?

不是。英特尔正在它的所有产品线中推广多核架构,为那些有兴趣进行线程编程的开发人员提供宝贵资源。英特尔认为,将来最大的性能提升必定来自于架构创新,而不是时钟频率的增加。然而,线程编程的成本优势分析需要由开发人员来做。不会占用大量的 CPU 资源并且不需要为改善性能、可靠性和安全性而进行扩展的应用,可能不适合进行线程编程。

返回目录


英特尔如何提供帮助

 

我已经确定,线程编程是明智之选。现在,我应该做什么呢?

注册英特尔开发人员专区,该专区提供技术文章和代码样本;英特尔高管和其它行业领袖撰写的战略性文章;基于 Web 的培训会议、面授课程和播客;供评估和购买的软件产品、软件开发套件和工具;以及供用户与专家和同行讨论开发产品、平台和技术的社区论坛。注册英特尔开发人员专区(该专区提供许多与线程编程相关的内容)是免费的,而且允许用户访问所有开发人员中心内容、每两周出版的新闻简报、解决方案目录和个性化主页。

是否有可以帮助我开始学习线程编程的流程/核对表?

英特尔® 并行编程社区提供技术信息、工具、创新以及行业专家支持。在这里,您可以了解如何在多核和多处理器平台上开发并行程序和多线程软件。

英特尔® 学术社区是英特尔软件技术一站式培训商店,为大学教师提供了综合线程编程课程。这些课程可以在线教授,也可以通过课堂讲座的方式教授。课程包括多线程编程、线程编程工具、高级线程编程和特定线程应用。

英特尔开发人员专区上的多核开发人员中心在哪里?

利用多核芯片只需要编写多线程应用,英特尔® 开发人员专区确实维护一个并行编程和多核开发社区主页。

在对代码进行线程编程以便从多核架构获益的过程中,我如何获得支持?

任何人都可以访问英特尔客户支持中心,通过电子邮件提交一般的技术支持问题。英特尔开发人员专区注册用户(免费注册)可以在英特尔开发人员专区论坛张贴问题;英特尔工程师会参与论坛讨论并答疑解惑。购买英特尔® 软件开发产品或参加英特尔® 软件合作伙伴计划的开发人员有资格享用英特尔卓越支持,通过邮件获得更加高级和个性化的故障排除服务与支持。Real Solutions for Businesses like Yours(面向贵公司这样的企业的实际解决方案) 为针对客户的独特业务与 IT 环境量身定制的多核处理器提供收费服务转移指南。

多核或线程编程论坛在哪里?

英特尔开发人员专区论坛提供关于英特尔软件开发产品、英特尔平台和技术以及其它话题的讨论。英特尔工程师会参与论坛讨论并答疑解惑。在英特尔并行架构上进行线程编程论坛有很大的访问量,用于解决在开发面向服务器和台式机环境的操作系统和应用级线程化应用过程中遇到的问题。

有介绍如何为多核架构编写代码的书籍吗?

多核编程》是英特尔在 2006 年出版的一本书,由 Shameem Akhter 和 Jason Roberts 共同编写,可以帮助开发人员为英特尔多核架构编写高性能多线程代码,同时避免出现与多线程化程序相关的常见并行编程问题。英特尔与领先的软件厂商合作了十多年,可以交付线程优化代码:首先是面向多处理器平台,后来是超线程技术,现在是多核架构。

哪些英特尔软件开发产品可以帮助创建线程化软件?

英特尔® 线程检测器 V. 3.1(和英特尔® Thread Profiler V 3.1)可以查找线程编程错误和线程编程性能瓶颈。其它工具在创建多线程代码中也非常有用,包括支持线程超时采样的分析器,支持 OpenMP* 线程编程模式的编译器,以及针对性能进行线程化的性能库--详情请参考英特尔开发人员专区的并行编程网页

返回目录

 


其它资源

面向专家的多线程编程:同步

英特尔® 多核处理器架构开发背景

多核处理器架构详解

 

 


有关编译器优化的更完整信息,请参阅优化通知