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

并行编程基础:第一部分

了解线程构造块的核心算法——一个并行编程C++模板库。
大家好,我是 James Reinders,今天我们来谈谈线程构建模块。事实上,线程构建模块是一种有趣的 C++ 模板库,专门用于实现并行性。我们将分不同部分向大家介绍,今天是第一部分。

用于并行开发的 C++ 模板库必须具备多种有用特性,可为并行编程提供帮助。在这里,我将向大家介绍的特性是算法,线程构建模块的核心。

我们来简单看看一个“for”循环。这是一个非常简单的“for”循环,但却说明了在调度多个处理器时,我们应当考虑的循环的理念。这样看来,在 C 或 C++ 中按此方式书写时,这就是一个非常简单的循环。如果采用此循环并围绕它使用“pthreads”或什么的,以使其按并行方式执行,将需要添加大量代码来实现线程的创建和管理以及问题划分等。事实上,我们真正想写的代码更类似于我们在下面列出的那样。只有“parallel_for”按“O,n”迭代,执行先前在“mydbl”处调用的函数,并算出如何进行自动划分。

这正是我们如何使用线程构建模块来以并行方式执行此循环的核心所在。现在我们需要将循环放到一个被称为“struct”的类中,即我们需要创建 1 个带相应操作符并且其中有“for”循环的类。在引入此类时,我们必须添加一些参数。本例中,我们想有 1 个输入数组和 1 个输出数组,因此我们需要声明这两个数组并让相应的域传入其中。除此以外,循环基本保持一致。本例中,由于域是传入的,我们需要设定 1 个“range.being”和 1 个“range.end”来找到循环中迭代的起止值。

绕开其中的域即可使线程构建模块运行时系统结束循环,使其与所处系统中处理器数目相适应。 您会注意到,事实上在此代码中没有任何地方试图确定到底有多少个处理器;这一切都是在运行时自动发生的。

因此,我们必须将我们的函数声明为类的一部分,不过函数复制就结束了,并且只需为其添加少量参数就可使其正常运行。当然,我们在代码顶部需要使用一些“include”语句来包含定义文件,不过然后我们基本上只调用 parallel_for。本例中,我创建了这个类的 1 个实例,并为其设定了我想使用的输入和输出参数,然后我还使用了此模板。模块将扩展为非常高效的代码,自动利用机器的并行性。

除 parallel_for 以外,线程构建模块还提供其它几种算法。它们是“parallel_reduce”、“parallel_scan”、“parallel_while”、“parallel_pipeline”和“parallel_sort”。这些算法为您提供了相当多的模板,可满足您在程序中表达并行性的所有需求。在我的经验中,parallel_for 最为重要,此外 parallel_reduce 也很重要。其它几个则用得很少,因为 parallel_for 就能解决很多问题。事实上,线程构建模块中提供的 parallel_sort 就是用 parallel_for写成的

以上我们介绍了线程构建模块的算法。登录www.threadinbuildingblocks.org,您将学到更多。除可从该网站上下载一个副本外,还可查看相关文档等。接下来在第 2 部分中我们将学习线程构建模块的其它知识。

多核处理器有前途吗?

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

了解任务和数据并行

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

必须了解的三个并行问题

英特尔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