You'll need Macromedia Flash Player 8 or above in order to view some of our content. Download now!

必须了解的三个并行问题

英特尔James Reinders称,在管理多核系统方面,可扩展性、正确性和可维护性全都是至关重要的因素。
我是 James Reinders,今天我们将谈谈进行项目并行化时需要注意的三个关键问题。假设您听说过并行性,您也听说过多核技术,现在您打算把并行性引入自己的项目——您或者是靠自己的团队编写代码,或者向供应商购买解决方案。那么,您需要注意哪三个关键概念呢?

这三个概念非常简单,却又极端重要

一个是应用程序的可扩展性。

二是处理好正确性的问题,最后是注意程序的可维护性。我们先谈谈可扩展性。您的应用程序有多大潜力可以扩展至 N 个处理器?也许您今天正在考虑双核或四核处理器,并打算好好利用它们,但您是否考虑过将来,是否考虑过将来出现八核、16 核或更多内核的处理器时,您该怎么办?您是否认真考虑过,应该以何种方式应用并行技术,以免每过几年便要回头重新设计?

所以说,扩展的目的不一定是为用八个处理器获得八倍的性能。让我们回过头来,从更简单的角度来考虑这个问题。您希望两个处理器的性能超过一个处理器,四个处理器的性能超过两个处理器,八个处理器的性能超过四个处理器,16 个处理器的性能超过八个处理器,您希望随着可用的处理器越来越多,您过去编写的程序也拥有越来越强大的并行能力。获得扩展能力的最佳方法是寻找有助于扩展的解决方案。事实证明,这些解决方案还能帮助我们解决其它两方面的问题,所以,我们再来谈谈其它两个问题。

您也许还没考虑过正确性的问题。您如何保证并行程序将会正确运行?您可能认为,这不过是普通的调试问题。然而,有两类问题只会发生在并行程序中。这就是竞态条件和死锁。只有并行程序才会发生这两种问题。因此,您应该考虑如何编写代码才能防止这类问题发生,如何获得可用的工具和技巧,以便对它们进行调试或从程序中清除这类问题。用专为顺序执行程序设计的工具很难调试这类问题,这并不奇怪,因为顺序执行程序中不存在这类故障。

那么,什么是竞态条件呢?竞态条件是指,并发运行的两个任务——在不同处理器上运行的两个执行线程未能正确协调各自的活动,导致其中一个线程误以为发生了错误而停止运行。竞态条件调试起来非常困难,除非您有这方面的专用工具。

死锁是指,您有多个线程,其中两个线程互相等待,结果一直等待下去,无法完成任何工作。上面两个问题正好相反,但它们都是由于线程之间协调不当引起的。如果您的软件供应商无法回答这些基本问题,无法说明如何解决扩展性问题以及如何避免死锁或竞态条件,您可以问问他们是否认真考虑过自己的解决方案。这些都是必须考虑的重要问题,您应该问问自己,是否有解决它们的方案。

最后,我们谈谈可维护性。您是任由某位专家使用那些动辄需要重写、没几个人懂得维护的非常低级的接口编写代码,还是追求一定级别的抽象性?关于抽象,我们将在以后的录像中介绍,但如果您使用高级别的抽象,您的代码就更容易维护。这个问题其实就是,您使用何种编程语言,是用 C、C++、Fortran 等高级语言,还是用汇编语言?编写并行程序时也存在同样的问题,您是使用高级别的抽象,如 OpenMP、线程构件模块库、编写并行程序时使用的各种工具,还是使用 Posix 线程、Windows 线程等本地工具。在上述工具中,抽象能带给您更好的可维护性。更重要的是,“未雨绸缪”的概念能帮助您的程序做好准备,迎接更多内核的处理器的到来。通过我的介绍,您对这三个重要概念至少有了初步了解。如果您的供应商或设计团队打算采用并行技术,您应该首先关注以下三个问题。您以何种方式解决扩展性问题,您如何保证自己的项目不会因为正确性问题而推迟进度,程序完成后,您对它的可维护性有何看法?在此过程中,您是否想过让它在适当的抽象层面上工作。

多核处理器有前途吗?

了解多核处理器的功耗、内存和并行指令集。

了解任务和数据并行

任务和数据并行之间的差异,以及如何避免阿姆达尔定律施加的限制。

必须了解的三个并行问题

英特尔James Reinders称,在管理多核系统方面,可扩展性、正确性和可维护性全都是至关重要的因素。

并行之抽象方法

处理原始线程是并行应该避免的问题之一。抽象化为解决这个问题提供了一种方法……

成功的并行编程

说明一些开发者在为并行系统编程,力求改善工作效率时重复出现的话题。

并行编程基础:第一部分

了解线程构造块的核心算法——一个并行编程C++模板库。

并行编程基础:第二部分

英特尔的James Reinders深入探究线程建构基础——一个并行编程C++模板库。

并行编程之API

英特尔James Reinders解释消息传递接口(MPI)——一个并行API。

About Us | Contact Us | Membership | RSS Feeds
Privacy Policy | Terms of Use

Copyright © 2007 CNET Networks, Inc. All rights reserved.

Other CNET Networks sites: ZDNet Australia | CNET.com.au | AppleSource
Builder.com | Builder UK | TechRepublic