| 2007年09月29日 14:16 | |
多核处理器中执行内核数量的持续增加,将使那些不能完全实现线程化的软件遭遇性能滑坡,在市场中逐渐失去竞争力。并且伴随硬件并行处理趋势的愈演愈烈,软件公司的决策者们现在应该发起进攻,成功定位其产品。
作者:Matt Gillespie
虽然向多核计算的转变才刚刚起步,但在不久的将来我们必将以一种怀旧的思绪来追忆只有几枚内核的处理器。此外,随着硬件并行能力的不断提升,软件架构也必然需要逐步实现线程化,否则其性能下降趋势将变得越来越严重。例如,让我们来试想一下,在双核系统上未实现线程化的软件可能只能达到理论上所预期的 50% 的处理器利用率。而依此类推,在四核系统上该软件的处理器利用率将降低至 25%,在8 核系统上则为 12.5%。同样,随着处理器内核数量的增加,那些与未完全进行线程化相关的性能损失也会迅速的增加。
2007 年 2 月,英特尔演示了具有 80 枚内核的处理器。虽然创建此芯片的目的只是为了进行概念验证,而非专门研发投放市场的产品,但是它却为我们有力地证明了片上并行处理能力持续发展的可能性。如此大规模的并行,也为目前尚处摸索阶段的一些应用的研发创造了可能,例如:可以实时翻译为多种语言的电话内容、基于人工智能的先进数据采掘技术的发明,以及逼真的电脑游戏的制作都将指日可待。因此,软件公司若想在这些全新产品领域的开发环境中取得成功,就必须具备这样一个显著的前提条件,即将其应用充分实现线程化,以便全面利用硬件性能。
在进入 21 世纪之时,世界各地的软件公司在进行多线程化应用时都遇到了很多挑战。例如:如何在软件模式内确定实现并行处理的机遇、选择适当的线程模式以及成功地部署线程设计?这些棘手的难题困扰着许多公司,使得他们对线程化望而却步。当然,也有一些公司可能已另辟蹊径,无需真正的重新构建应用亦可利用硬件并行的一些优势。
但是细想一下,即使几年内多核的进程仍然如此,这样的捷径也只能是权宜之计,从长远来看,他们仍然需要采用正确的线程实践解决方案。因为当数据流在应用中进行线程同步时,不合理的线程实践可能会产生更高的成本。此外,如果软件运行在双核处理器上,尽管这样的捷径仍然可以支持应用实现比串行版本更出色的性能,但它却可能错失提升性能的绝佳机会。再者,如果应用能够充分利用四核处理器,则同步费用将可能变得更加高昂,而且随着内核数量的持续增加,相关费用的高涨最终必将超出企业可以承受的范围。
在这种情况下,从旨在运行于单核系统上的未线程化软件到旨在运行于双核系统上的线程化软件的移植,可能只会被视为一种概念验证。随着主流处理器逐渐增加至 4 枚内核甚至更多,主流软件下的线程模式和实践必将变得更加复杂。本文向软件制造商介绍了一些与整个行业过渡到采用大量内核的处理器中相关的问题和机遇。其中重点讲述了决策者目前应该如何定位自己以及公司,以便在未来竞争中取得成功。
软件开发企业在对未来多核产品进行定位时,必须采取的首要步骤便是承诺实现目标。虽然决策本身非常简单,但是在执行过程中却需要遵守一些原则,因为需要人们必须长期遵守那些(尤其是在早期)看起来与近期要求并不一致的设计方法。
例如,当产品的完成时间非常紧张时,认真分析架构中是否存在实现并行的机会就很容易被排除在高优先级工作的列表之外。虽然从逻辑(也有一定程度的必然性)上说,我们自然而然地会将立即完成产品要求置于支持未来目标之前,但事实上,相比从最早期的设计阶段开始使用本身支持多线程的架构,最后在产品架构更新中加入并行能力的花费可能会更加昂贵。
这样,在公司开发的所有产品中采用多线程的关键就在于,使近期产品上市时间和成本要求与长期战略之间实现平衡。为此,正式将高度线程化应用设计同时作为近期和长期目标,就成为了一个重要的步骤。为了支持现有及未来应用的线程化工作,战略专家必须向管理和开发人员讲解将多线程作为一项长期要求的重要性。为了取得成功,战略专家在讲解时必须同时谈及业务需求和开发技术两方面的内容。
业务需求方面,还要充分考虑到多核硬件发展趋势的重要性。尽管目前的主流处理器最多已能够同时处理几个软件线程,但是它们显然无法应对未来需要支持数百甚至数千个线程的硬件设计。英特尔® 软件网络出版的杂志《英特尔® 软件展望》
等业界资源,可为利益相关方宣传针对大规模多核硬件架构的未来能力规划软件的重要性。您可通过电子预订收到免费的双月刊杂志,也可以通过您的电子邮件用户资料选择收取文章、白皮书、案例研究和产品简介等。您还可以选择性的接收产品发布、培训和与您相关的活动的通知。
如欲为进行多线程开发的企业提供技术需求支持,那就需要不断提供知识和展培训。在这方面英特尔为软件开发商提供了广泛的资源,尤其英特尔® 软件网络线程/多核开发人员中心
即是一个良好的起点。本站点中保存的重要资源包括白皮书和其它技术文档、培训、简明知识库以及针对开发人员而撰写的文章。每篇文章都能够解决与线程软件开发相关的特定挑战,并为开发人员提供能够立即使用的具体解决方案。英特尔软件网络还提供了一个培训门户网站
,它不仅为我们提供了网络课堂和面对面培训的机会,还为我们设立了在线研讨会和点播网络广播,以解决各种开发问题。
为了使其他人和企业全面了解软件多线程的重要性及其要求,我们就必须能够清晰而简明地为他们解释其中的处理流程。那么,简言之,线程化就是将软件应用承担的大型任务分解为许多个子任务,而且每个子任务都能够独立并同时处理应用的过程。在线程化中,每个任务都会被指定到单独的内核,而子任务的结果将根据要求(“同步”)重新组合,以生成一个整体结果。
由于同时执行多个子任务,所以可以更迅速地实现整体结果,这也即是多线程处理的核心优势所在。您可能还会产生多种疑问,例如:创建执行线程、分配具体工作、然后拆分线程时是否会增加复杂性和性能开支;如果操作不正确,这些处理是否会产生不正确的结果或造成性能下降等等。这些疑问正反映了正确的线程方法的重要性所在,同时也涉及到将任务拆分成正确的子任务和协调在这些子任务上执行工作的线程这两方面问题。就第一方面——将任务拆分成正确的子任务而言,您需要熟悉两种常用的方法:数据分解和功能分解。
数据分解概念相对来说较为简单:它是指在不同的数据片断上可以将反复执行相同工作的任务进行细分,意即将整体数据集的片断分配到各个线程上同时执行。数据分解的一个典型范例就是在一个图像上使用过滤器或者采用图形效果。通过为几个线程中的每个线程指定某图片的特定部分,每个线程都可以按像素应用所需的算法逐个分解,直到完成自己的工作。每个这样的“工作者”线程都由主线程进行协调。主线程需要协调所有的任务,以确保整体结果保持一致。注意在此例中,由于每个工作负载都可以定义为指定数量的像素,因而平衡各个线程中的工作负载也就变得相对简单了。
功能分解的概念也很简单。首先,它需要确定某软件在任何指定时间内需要处理的每项分解工作,其次,它需要为每项工作分配线程。例如,文字处理器可能需要持续刷新显示器以反映用户的工作情况,并执行后台保存和打印功能,以及对照已经保存的词典列表交叉引用文本中写入的文字。每项这样的任务(当然还有许多其它任务)表面来看,似乎都可以分配到独立线程中单独执行,但在事实上,它们却与数据分解一样,需要由主线程进行协调。在功能分解方法中,工作负载平衡工作将比数据分解模式稍显复杂,因为我们很难测量每个子任务究竟需要多少工作量。
当然,单个应用中可能同时包含数据分解和功能分解两方面的问题,而且工作负载的实际特性也比“2 个尺寸解决所有问题”的模式更为复杂,但是这种描述工作负载的方式却不失为考虑高级线程架构的一条实用途径。另一种描述工作负载线程能力的方式是具体介绍参与创建线程化版本的开发人员的工作量。在这种描述方式中,工作负载可以被视为以下三种广泛定义的类型之一:
- 轻松实现线程化的工作负载:如上所述,这些问题都暗示着显而易见的线程模式。有时,这样的问题也被称为“使人尴尬的并行”,其比例约占全部工作负载的 10-20%。
- 线程化难度适中的工作负载:由于英特尔处理器潜在的性能提升可持续保有其竞争优势,因此我们在不懈努力实现工作负载并行处理时,经常会遇到线程化难度适中的工作负载。这些工作负载包括一些数据库应用、数据采掘、合成、文本和语音处理,约占全部工作负载的 60%。
- 非常难以线程化的工作负载:这个类型所包括的工作负载非常难于进行并行处理,因为线性排列使得一个子任务的输入数据通常要由另一个子任务的输出数据来决定,对它们进行线程化的商业优势也就必须根据工作的成本和技术复杂程度来认真考量。
通过将线程化处理任务的难度与实现线程化的商业价值相权衡,我们就能够创建框架来确定并行化优先级。这项工作的实施为软件制造商提供了开始进行常规战略规划的方法,以便其确定应用内工作负载进行并行处理的优先级。
开发线程软件时有一个不可忽视的一个因素,即特定软件的设计支持何等数量的执行内核。如果应用是专为支持一定数量的内核而构建的,那么一旦支持它的主流机器的内核数量明显超出了此上限,我们就极有可能需要对该应用进行重新设计。或者可能的话,应构建应用逻辑应以便充分利用全部的可用内核。上面介绍了一个非常简单的示例,说明了如何在一个完整的图像中使用一个过滤器来完成此类数据分解操作。为了充分利用更多数量的执行内核,代码可以简单地检查可用逻辑处理器的数量,并创建合适数量的线程来支持它们。此时,逻辑处理器的数量可以使用下列公式来计算:
PL=PP*CP*H
其中 PL 是指逻辑处理器的数量,PP 是指物理处理器的数量,CP 是指每个处理器中执行内核的数量,H=2 表示支持超线程 (HT) 技术的系统,H=1 表示未采用超线程 (HT) 技术的系统。请注意,最适宜的线程数量通常是指不超过逻辑处理器的数量,而实际问题中前者亦可能明显少于后者。
随着处理器架构日益变得庞大和复杂,这样的灵活性将愈发重要。上文提及的 80 核芯片采用“平铺”设计,支持在芯片上复制多套同样的架构。这样的创新有望在未来开发具有开放数量内核的芯片。另一个比较有前景的领域是开发那些支持软件根据需要开关内核作为能效衡量标准的技术。虽然这些具体的创新或许不可预测,但是我们仍然可以考虑那些软件最终会运行其上的硬件范围。强大、灵活的软件设计可以适应诸如此类的变化,尤其是提升开发项目的早期设计阶段所额外花费的时间和精力的价值。
充分利用这些大规模并行系统实现性能大幅度提升的真正优势在于带来了解决以前不可能解决的新型问题的能力。我们不能单纯依靠普通的方式来解决这些越来越复杂的并行计算问题;识别、挖掘与合成 (RMS) 正是帮助我们直观了解该分析类别的一种模式;以下是该模式的三个组成部分:
- 识别:为描述输入数据的具体式样创建数学模型,如象征特定性格类型的显著特点,或者在医疗成像中表示肿瘤的图案。
- 挖掘:查询数据以确定模型的例程,如检查调查结果以定位符合所需性格类型的人,或者自动分析大量医学图像,以查找正在考察的类型的肿瘤。
- 合成:分析数据以假设其对于解决一系列问题的重要性,如预测个人在具体工作中的成功与否,或者鉴定某一位肿瘤患者可能的病情变化情况。
RMS 模式不但功能强劲,而且代表着可能从硬件越来越多的并行化发展中受益的软件设计类型。大型 RMS 模型对计算密度的要求非常严苛,而其所涉及到的大型数据集通常可为这些问题的解决方案提供明显的并行机会。基于这些特性,RMS 的执行就是展望未来解决方案设计类型的典范,它表明,处理器的创新影响着软件制造商未来的成败。
使用工具和技能以简化创建高质量线程软件的工作,是开发机构能够长期支持软件并行成功的另一个重要原因。全系列英特尔® 软件开发产品
专为共同推动并行软件的开发而设计:
- 英特尔® 编译器能够自动将线程引入软件中。编译器设置可对自动并行化和 OpenMP* 等工业标准线程技术实施全面控制。这种事半功倍的自动化技术使英特尔编译器成为您进行初始线程化工作的理想选择。
- 英特尔® 性能程序库可提供优化的软件程序,从而支持您轻松地为应用添加并行能力。许多这样的程序都提前进行了线程化处理,并且全部支持线程,因此非常适合部署于线程软件中。此外,这种低成本选择无需广泛的工作即可构建线程级的性能。
- 英特尔® VTune™ 性能分析器能够识别非常适合于手动并行的代码片断。通过系统地识别这些片断并抓住与之相关的机遇,您就能集中精力应对那些能够产生最好结果的代码,并对其进行线程化处理。
- 英特尔® 线程工具能够大量简化线程代码的调试和性能优化工作。英特尔® 线程检测器能够够优于测试机器,帮助开发人员识别代码中潜在的线程错误,避免错误发生。英特尔® 线程调节器负责检查线程行为,以确定潜在的性能改进点,支持您有效地调整线程行为。
- 英特尔® 线程构建模块包括现成的库函数,可以简化线程数据结构和算法的开发工作,加快软件在多核硬件上的运行速度。现成的并行算法可轻松地对应用进行插件部署,以提供可扩充的软件加速性能、检测可用执行内核的数量、并在此基础上动态定制代码。
考虑一下英特尔® 软件开发产品部门市场推广与业务总监 James Reinders 提出的下列观点,他说:“在未来的开发工作中最能打动我的,就是软件开发人员即将经历的巨变。今后十年内,我们将回顾并思考我们编写程序代码的方式到底会发生多么巨大的变化。对于大家而言,并行将是普遍存在的现象。而且实际上,这样不仅可为公司带来大量机会,也会为每一个独立的软件开发人员提供新的机遇(包括工具开发人员),例如我们在英特尔软件开发事业部中的团队。现在我们拥有非常好的机会,可以重新思考并规划未来 10 年的编程战略,并寻找能够全面利用多核处理器架构潜力的方式。”
许多软件开发机构都承诺将借助多线程面向并行架构优化其产品。然而,即使业界已开始认识到在运营中进行这样的范式转变有很大必然性,许多软件公司却尚未完全致力将自己的成功定位于支持未来在一个处理器上拥有数十、数百或数千枚执行内核上。面对众多貌似即将实现的场景时,我们需要着重考虑向此方向提供长期规划的步骤。
不专业的线程实践可能导致拥有大量内核的平台产生不可接受的性能,认识到这一事实之后,各企业均开始围绕在软件中支持大规模并行来规划长期战略。这一变化使得有头脑的企业领导需要明确阐述企业逐步实现并行化所需的相关技术和业务资源,并能选择支持当前和未来几代硬件的流程和规划。
您可围绕如下材料进一步探讨本话题:
- 英特尔® 多核软件开发社区将与创建能够充分利用多核处理技术的软件相关的各种开发资源集中在一起。
- 英特尔® 多核技术与研究门户帮助您了解当前英特尔多核技术的各种资源,以及正在进行的创新和研究。
- 借助能够集成到普遍使用的开发环境中的工具,英特尔® 软件开发产品 有助于简化高质量并行软件的开发工作。
|
|
Matt Gillespie 是芝加哥地区的技术文档独立作家和编辑,其主攻领域为新兴的硬件和软件技术。在此之前,Matt 在英特尔公司为软件开发人员开展培训课程,他还曾在加州联邦银行互联网技术服务部工作过。在其职业生涯的最初几年,他还从事过金融出版和神经科学领域的作家兼编辑。
|

