Programming 版 (精华区)

发信人: JJason (C++ Primer), 信区: Programming
标  题: 使用POOMA进行科学计算(节选)
发信站: 哈工大紫丁香 (2002年11月17日22:47:34 星期天), 站内信件

这本是发表在C++ User Journal 2002.11 期上面的一篇文章,
我已经将全本贴在本版。现在试着翻译了起面的两段,
贴出来给大家看看,如果有用,你尽量再去查看原文。
首次翻译,斗胆贴了出来,肯定有不少错误的地方,还望多多指教:)

/////////////////////////////////////////////////////////////////////////

                    使用POOMA进行科学计算(节选)
                                    作者: Jeffery D. Oldham     翻译: JJason
 
科学家和程序员们将科学变成算法,并用程序实现了它们。科学和算法对科学家的确很
有趣,但用程序实现它们就不那么有趣了。科学家希望实现算法的程序正确、高效,又灵活
快速。

由洛斯阿拉莫斯国家实验室开发的POOMA( Parallel Object-Oriented Methods and 
Application, 并行面向对象方法及应用 )工具包,解决了这个难题。这个工具包提供了一
组高级的C++工具,可以快速地用程序实现许多科学算法。这个工具包让科学家能够方便地
使用诸如数组、场、数据并行表达式之类的工具,同时将底层的计算机知识隐藏起来。
在本次话题中,我将向读者介绍POOMA工具包,并且展示POOMA工具包如何简化"将科学算法
翻译为程序"的任务。随后,我将说明如何使用POOMA实现二维扩散算法。我将对程序进行
个别改动,让它可以使用上千个处理器地计算机上运行。通过本文,读者将看到卡方源码
工具包可以大大简化并且加快科学算法的编程。

从算法到程序的容易转变

POOMA的概念和语法符号常用于描述科学算法。因此,采用POOMA撰写的科学的程序是这样
的:

●   易于编写;
●   非常简短;
●   易于调试;
●   通常正确。

例如,一个数学公式x=3sin((v-w)/π)-4.2cos(w*w) 可以直接转化为C++代码:
x = 3.0*sin((v-w)/M_PI)
    -4.2*cos(w*w)
式中v,w,和x可以是标量数值,可以是向量,可以是矩阵,甚至可以是数值的容器。由于PO
OMA容器自动地分配和释放内存来存储数据,内存的分配和释放错误概率降低了。此外,容
器是最好的概念,因此它们能用做函数文件,也可以像内建数据一样简单第进行拷贝。

由于工具包可以自动地进行处理器之间的通信,熟悉顺序编程的程序员可以容易地写出运
行在数千个处理器上的程序。由于同样的可执行程序可以运行在任意多个处理器上,许多P
OOMA程序都在单处理器工作站上调试,然后在多处理器计算机上运行而不需任何额外的工
作。

所有的这些益处加速了将算法转化为程序的速度,因此科学家可以将时间用于对他们重要
的事情:科学。例如,洛斯阿拉莫斯国家实验室的4人小组利用POOMA来实现广泛的物理仿
真试验,平均仅用两天就可以将一篇科学论文转化问程序。

有三个概念是你要利用POOMA工作所必须理解的:
●   容器:POOMA的容器支持数据的存取。POOMA的数组(Array)扩展了C++的数组的功能,
支持多维和数据并行的表达式。其他POOMA的容器,包括场(Field)( 其支持以场为基础的
科学计算,这种计算数值是存放在网格中 ),向量(Vectors),矩阵(Matrixes),和张量(T
ensors)。
●   计算方式:计算方式是描述容器中存储的数据的计算语法。C和C++程序员习惯按元素
计算方式,这种方式容器中的每个值都是单独取得的。许多常见的数学操作符需要的是数
据并行方式,这种方式许多数值是同时取得的( 参考工具条,"POOMA数据并行计算语法")
。其他计算公式包括模板(原文为stencils)( 本文后面有说明 )和关连计算(原文为relati
onal computation)。关连计算实现了懒散赋值,这样一个容器的值依赖于其他几个容器的
值。
●   计算环境:计算环境将要运行程序的机器和操作系统。使用执行程序的一个线程的顺
序计算对于程序员是很熟悉的。POOMA也支持采用SPMD( Single-program, 
Multiple-data )模型的分布式编程,这种模型非常适用于科学计算。任意个处理器都可以
使用不同的数据来执行相同的程序。

POOMA工具包

POOMA工具包是实现科学和技术算法的多用途库。它曾经被用于仿真天气模型中的水平对流
,仿真扩散过程,例如本文描述的中子扩散程序( 可从<www.cuj.com/code>下载 ),还可
以解决线性方程系统问题。它可以用于存油池的建模,或者预言经济观点的价值。POOMA已
经用于实现Conway的生命的游戏(John Conway以某些规则来模拟生命细胞生、死等等,不
过不是真正的游戏,而是比较经典的程序,译者非科班出身,不知确切翻译)。这些程序已
经运行于台式计算机和拥有数千个处理器的大型平行计算机上。POOMA工具包提供了一套广
泛的工具。为了存储成组的数据,它提供了一维和多维数组和场等容器。经常编写科学和
技术性程序的人都知道,数值的数组(或网格)是程序的核心。场容器扩充了三维空间的概
念,这样数值不但可以存储而且数值之间的距离也可以计算。容器中的数值可以单独进行
处理,但数据并行处理数据的操作类似于Fortran 90。模板(原文为stencils)支持局部计
算,如在Conway的生命的游戏中,细胞的生和死都取决于期周围它相邻的值。这个工具包
提供了向量、矩阵和张量类以及数学操作符。它可以支持多处理器计算,并以最小的代价
实现处理器间的通讯。程序员只需要指定容器中的数据如何分发到各个处理器中,POOMA就
可以自动保证处理器间的通讯。这样,同样的石油存油池计算程序可以在台式计算机模拟小
的场,也可以在许多计算机上来模拟巨大的场。
 
--

     人生,就是一团欲望:
     欲望没有满足的时候就是痛苦,
     欲望被满足的时候就是无聊;
     人生就是在痛苦与无聊之间徘徊。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.69]
※ 修改:·JJason 於 11月18日08:54:50 修改本文·[FROM: 202.118.229.69]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:7.351毫秒