三大战略确定实现并行处理的机会

下载源代码: 英特尔样本源代码许可协议

 


在对软件进行并行化处理的过程中,开发人员采用结构化方式制定调试方法和创建工作负载(如本系列第一篇文章所述)后,便为确定实现并行处理的机会做好了准备。这些机会与本身可实现并行化的串行代码中的瓶颈有关。本文开头将定义瓶颈并将探讨它们的来源,之后将详细介绍解决这些瓶颈的三大战略:

 

 

 

  • 寻找并行机会前优化串行代码,避免受串行低效的干扰,有助于确保您主要解决热点问题。
  • 利用可用工具,包括英特尔® VTune™ 性能分析器和英特尔® Parallel Advisor Lite,最大程度获取优势。
  • 如必要,标记关键代码段,利用支持在 n 个内核的系统上实现并行处理的算法进行重新设计。

 

 

瓶颈是什么?

我们讨论确定并行化机会的实际战略前,我们需要了解一些背景信息。具体而言,了解性能瓶颈是什么和利用软件多线程可解决的瓶颈有哪些特征非常重要。企业首先应找到热点和瓶颈的不同之处:
 

  • 热点是处理器花费大量时间运行代码的地方,可利用分析工具在性能调试过程中测量。由于处理器花费大量时间运行这些代码段,因此很明显,缩短处理器运行这些代码所需时间有助于加快代码的整体运行速度。

    同样需要注意的是,仅仅由于处理器花费大量时间运行某一操作就认定这一代码段低效是不必要的。它可能只是表示此处完成大量任务。
  • 瓶颈是指该框架中一个低效的热点代码区,因此一部分热点是瓶颈,而所有瓶颈都是热点1。用另一种说法表示是,热点是潜在的瓶颈,因此确定热点是找到瓶颈的第一步。利用瓶颈的定义可有效地将注意力集中到寻找优化机会上。

本文旨在重点说明,多核硬件上的低效瓶颈是由于代码没有充分利用硬件并行化。此外,瓶颈还可能因串行代码低效而产生,后文将对这两类低效之间的关系进行讨论,具体内容见“战略一:寻找并行化机会前优化串行代码。”由于我们往往会认为硬件并行化是一个处理器中的多个物理内核提供的,因此出于完整性考虑,了解其它两类常见的硬件并行化类型非常有用:
 

  • 英特尔® 超线程(HT)技术是一项硬件特性,使一个处理器内核能够支持两条线程同时运行。
  • 对称多处理是一个系统内多枚处理器提供的并行化。

当处理器密集型代码可分解同时运行多项任务时,利用软件多线程处理解决瓶颈的机会便产生了。此外,需要注意的是,应用一些运行较慢的部分不能实现并行化。例如,如果处理器并非是决定速度的因素(例如,当处理器需要等待 I/O 操作或受限于内存),则并行化不是实现优化的可行方法。
 

并行化瓶颈的来源

现在,我们已了解瓶颈有哪些,并大致了解了利用软件多线程可解决的瓶颈的类型,接下来我们将探讨更具体的问题,了解哪些原因导致瓶颈产生以及如何找到它们。这个讨论结果将为三大战略奠定基础,用以确定借助并行化增强性能的最佳机会。

开始您会很明显地发现,可获取并行化优势的瓶颈出现在单线程或程序代码中,但不太容易指明哪些串行代码部分可能会在经过多线程处理的大型应用中出现。考虑将并行化作为迭代流程使用时,这种区分非常有用。开发人员确定线程可在应用的哪个部分最大程度提高整体性能和首先应用线程化。此时,应用由一部分并行代码和一部分串行代码组成,一些串行代码部分可能会在未来进行线程化。

如果这样理解典型的多线程应用,那么确定瓶颈的任务就是找到失去并行化机会的位置。以下章节我们将通过示例详细讨论此类机会,具体内容见“战略三:如需要,标记关键代码段进行重新设计。”其中包括:
 

  • 可以但没有并行化执行的处理器密集型任务。在此类别中错过的机会包括一些操作,如在执行一些类型后端处理的同时更新用户界面的操作,有时被称为“任务级并行化”。
  • 可以但没有并行化处理的数据集。在此类别中错过的机会包括一些操作,如将多个数据库记录转化为不同的格式,如以逗号分隔的文件,有时被称为“数据级并行化”。

根据常规经验,最好尽可能早地在设计流程中利用这些设计模式。理想情况下,在开始编写代码前找到这些机会,这样有助于避免多余的编程工作。也就是说,更常见的情况是,在迭代流程中(如上所述)确定软件生命周期内的并行化机会。
 

解决并行化瓶颈的三大战略

到目前为止,本文为确定软件中的并行化机会奠定了理论基础。我们已讨论了瓶颈是什么(和瓶颈不是什么)以及解决哪类瓶颈是通过并行化手段实现性能提升的理想之选。此外,我们还讨论了导致瓶颈出现的常见原因以及寻找这些瓶颈的一些理论基础。

本章将对战略进行详细说明,旨在帮助您创建在软件项目中尽可能简单高效实施并行化的流程。这三大战略并非无所不包,但它们可提供坚实的基础,帮助确定在代码中实施软件多线程化处理的机会。

战略一:寻找并行化机会前优化串行代码。

由于找到并行化的最佳机会依赖于找到占用处理器最多时间的应用部分,因此很明显,您必须首先最大程度降低低效串行代码的影响。如果仅仅因为串行代码不太理想,而只关注处理器在哪里花费的时间比所需时间多,那么您将无法准确地找到并行化机会。

理解相同理论依据的另一种方式是,如果串行优化更改占用处理器最多时间的应用部分,您需要查看不同的代码段,以便找到不同的并行瓶颈。经良好优化的串行应用为并行化处理奠定了强大的基础。作为该战略的必然结果,尽可能地了解串行算法的运算有助于您确定并行化机会和构建线程化版本。
 

有关性能调节器的更多信息

英特尔® 软件网络白皮书针对多核处理器优化软件详细阐述了串行优化如何适用于并行编程流程。

 


战略二:利用可用工具最大程度获取优势

除了在理论上了解确定并行机会的前提,还可采用现有的各种编程工具帮助实现并行化。巧妙地使用这些工具有助于更准确地确定机会,并可提高流程的效率,这对于提高线程化软件的质量和减少投入时间和精力非常宝贵。

英特尔® VTune 性能分析器旨在对快速确定热点的应用进行分析。该工具输出直观的界面,显示执行路径如何穿越代码,使程序员以多个角度深入分析产生特定行为的特定代码段。利用 VTune 环境,开发团队可轻松找到占用处理器最多时间的应用部分,这对确定串行和并行代码的机会很有价值。此外,性能分析器与英特尔® Thread Profiler 集成,有助于以可视化方式体现线程的运行情况和线程之间的互动,以便开发人员可以确定在应用的线程模式内的哪个地方存在着不平衡。

英特尔® Parallel Advisor Lite 是英特尔® Parallel Studio 附件功能的技术预览。英特尔® Parallel Studio 是一个由多个部分组成的并行化工具套件,与 Microsoft Visual Studio* 协同作用,优化软件并行化。英特尔® Parallel Advisor Lite 关注串行代码中的建模并行化,展示并行化如何对应用带来益处。这种方法有助于您为应用多线程化做好准备,通过找到串行代码中进行并行化之前应解决的缺陷来优化整个流程。该工具指导您完成确定并行化的理想方法和解决数据访问问题(可能以其它方式出现在线程化版本中)的整个流程。利用英特尔® Parallel Advisor Lite 准备好串行应用有助于更轻松地顺利完成整个并行化流程。

一般而言,英特尔® 软件开发产品采用并行化软件设计。尽管本文不对所有这些工具进行讨论,但读者应注意这些工具适用于整个软件生命周期。除了帮助寻找多线程处理机会外,这些工具还有助于线程部署、调试和故障排除。

 

 

 

有关性能调节器的更多信息

英特尔® 软件网络文章英特尔® Parallel Advisor Lite介绍了该工具,并阐述了如何将该工具成功融入编程流程中。

 


战略三:如需要,标记关键代码段进行重新设计

为了利用并行化机会对代码进行分析时,还需要注意设计无法实现并行化的编程部分。这种战略的推论非常简单。串行代码用于按顺序一个接一个完成一组任务。并行代码找到彼此独立的任务片段,使它们能够同步运行。

与串行代码不同,为了按一系列步骤并行完成任务,有必要将任务分解开来运行。可以采用各种技巧完成这个操作,统称为“分解”。分解任务支持并行化的主要方式是“任务分解”和“数据分解”。以下我们简要讨论每种分解方式,介绍分配数据和任务进行并行处理的理论依据。注意,我们的目的并非讨论如何重新设计算法,而仅仅在于找到机会的一些基础类型。

 

 

 

 

 

  • 任务分解(也称为“功能分解”)包括确定可同时执行的不同任务,每项任务可在自己的线程上完成。例如,文字处理器可能需要持续刷新显示器以反映用户的工作情况,执行后台保存和打印功能,以及对照已经保存的词典列表交叉引用文本中写入的文字。还需要“主线程”协调其它线程的工作。
  • 数据分解包括在多个数据段上同步执行任务。典型的实例是,对图像应用图形效果,如调亮照片。需要对图片的每个像素应用相同的算法(计算新颜色信息),在主线程跟踪整个任务的过程中同步完成任务。

相比串行版本,每种类型的分解都需要采用不同的方法分解代码执行的任务,在许多情况下,需要采用本质上不同的方法。需要注意确保潜在优势是可满足记录时间和成本要求。另一方面,对于占用大量处理器时间的代码串行部分,有时,从根本上开始重新设计是最佳的选择。

 

 

 

 

有关性能调节器的的更多信息

英特尔出版社推出的多核编程包含有关并行算法设计的大量理论和实践建议。

 

 

 

 

结论

由于并行化是重要的设计规则,因此可在应用生命周期的任何时间上获得线程化机会。本文中的理论依据将帮助您初步了解相关内容。本系列后面的文章将帮助您找到线程优化问题,如确定线程的确切数量或解决线程中的依赖性问题。请继续关注。

 

 

 

 

社区共享

告诉我们您在性能调节并行应用中所获得的结果,包括哪些有效,哪些无效,与行业同仁和英特尔专家沟通,解决主要问题(或帮助其他人解决问题):社区论坛:基于英特尔® 并行架构的线程技术

 

 

 

 

深入研究的资源

本文为您提供可改进性能调节工作的资源,以下站点将有助于您更出色地实现性能调节:

 

 

 

 

 


1有些人不同意这种说法,因为瓶颈的低效性只占很小的比例,不会占用大量处理器时间(因此不是热点)。由于此处我们只考虑获得良好优化机会的瓶颈,因此我们使用了这个略有局限性的定义。

 

 

 

For more complete information about compiler optimizations, see our Optimization Notice.