并行优化规划


下载此白皮书

针对多核技术优化应用正在迅速成为一种行业趋势:多核电脑已经成为主流,占 2010 年 PC 发货量的 83%。而且,根据 IDC 《2009-2013 全球 PC 处理器预测报告》,内核的数量正在不断增长,预计 2012 年 PC 发货量中的 60% 将具备 4 个或更多内核。并行优化能够带来大幅性能提升,但是您将需要制定适合于您应用的行动计划。以下技巧可以帮助您快速入手。

重新设计或调整

您需要做出的第一个选择是:从零开始并行设计还是对现有的代码进行调整。如果您已经拥有一款运行正常的串行应用,您可能会将其作为起点并想办法引入并行性。

在对现有代码做出任何更改之前,请务必对您当前的软件性能进行测量以设定一个基准。随后,在您做出更改后再次进行测量,这样您就能够判断您的更改是否确实带来了性能的提升。

采用何种方式测量应用性能将取决于应用的设计用途。要确保能重复性能测量,请先确定您将要测量的工作负载。工作负载指的是您确定您的应用将要执行的一项或一系列任务。目的是确定一项可以重复的工作负载,然后在工作负载执行时进行测量。知道在特定时间内完成的任务数量后,您随后即可重复此工作负载并查看您的应用是否在相同的期限内完成了更多的任务或在更短的期限完成了相同数量的任务。这将让您能够直接测量出您在调整应用后实现的性能提升。您也可以通过使用测量应用并发级别的工具,如英特尔® 应用并发审计工具 (Intel® Concurrency Checker),来测量您代码调整工作的进度。

分解功能或数据

如果您以现有的串行应用开始,那么应用的结构将决定是采用功能分解还是数据分解(或两者并用):如果您的应用具备互相独立的功能或任务,那么它们可能并行运行。如果您的应用具备运行于大量数据之上的功能且可能将数据分解成若干能够独立处理的更小单元,那么您可能采用数据分解。

应用的特性还将决定最佳的并行粒度。粒度指的是组成应用的任务需要多久互相通信一次。所需的通信频度越低,能够使用的并行粒度越粗,由于所需的通信开销更少,应用也就能够从并行性中获益更多。

识别热点和瓶颈

在开始进行更改之前识别出最大问题出现在哪里非常重要。用于识别代码中热点或瓶颈的工具将能够指导您将精力用在能够产生最大改进的地方。热点是处理器耗费大量时间的地方,因此可能是针对代码低效而进行优化的最佳目标。然而,也可能热点已经很高效,处理器之所以在此耗费大量时间是因为大量任务正在执行。当处理器需要花费额外的时间是由于低效时,热点就成为瓶颈。如果您确定瓶颈能够并行处理,那么它将是您进行优化的理想位置。

选择方法

知道代码的哪些地方需要改进后,对于如何进行并行优化您会面对不同的选择。根据英特尔并行计算调查(Evans Data Corp,2011 年 4 月),开发人员最常使用的三种并行编程技术分别为多线程、共享存储模式和消息传递。

  • 多线程支持在单个进程中存在多个共享内存和其它资源的线程(将由 CPU 完成的任务),从而使多核系统运行更快。多线程的缺陷在于它带来了不确定性:您可能无法预测处理顺序,这可能会导致错误。
  • 共享存储模式支持多个处理器共用一个内存空间,从而提供一个统一地址空间。该空间虽然使用简单,但是也需要谨慎规划,以便在事件之间存在依赖性时避免竟态条件。
  • 消息传递涉及到进程之间的通信,实施起来可能更加费力,但是它能够通过同步避免竟态条件。

测量进度和检查错误

每次向应用中引入更多的并行性时,我们建议您重新测量您的工作负载以查看您是否在改进应用性能方面取得进展。这时,采用诸如英特尔® Parallel Studio 等线程错误检查工具来确保您没有在代码调整过程中引入任何缺陷也非常重要。在确定最近的并行优化步骤取得成功之后,您可以重复该过程以寻求更多的并行性和更大的性能提升,或在实现您的目标后停下来。

如欲了解有关并行优化的更多信息,请访问英特尔® 软件网络并行编程社区,从中您可以访问众多工具和资源,帮助您针对多核技术优化您的应用。

说明

作者简介

Diana Byrne 是英特尔软件和服务事业部的多核产品经理,她自 2004 年起一直担任这一职务。Diana Byrne 拥有数学、计算机科学和技术管理等专业的硕士学位。

如需更全面地了解编译器优化,请参阅优化注意事项