第3章
Programming Models for Parallel Computing
OpenSHMEM
Jeffery A. Kuehn,橡树岭国家实验室
Stephen W. Poole,橡树岭国家实验室
3.1 引言
OpenSHMEM [74,138,223]是SHMEM API [88,87]的当代派生物,SHMEM API是克雷研究公司(Cray Research)于1993年为有效编程克雷T3D计算机系统而开发的[85],1996年当克雷研究公司被SGI [251]收购时被转让给了SGI,对SHMEM的使用权接着同2000年被重命名为克雷公司的克雷业务单元一起转让给了Tera公司。在这三个公司的每一代产品中,SHMEM API都体现了对大规模系统的鲁棒性和灵活性,在需要对超大规模系统开发软件的用户群体中发展出了牢固的追随者,引导包括IBM、Quadrics(Vega UK有限公司)[235]、Hewlett Packard、QLogic和Mellanox等很多销售商开发自己的SHMEM API实现,虽然这些实现大部分是一致的,但也有一些小问题阻碍了不同实现间的应用可移植性,因此2009年橡树岭国家实验室的超大规模系统中心参与了标准化API的工作,这个标准化的API就是OpenSHMEM。因此,它是20年来对最大规模可用计算能力的使用、研究和开发的结果。在本书撰写之时,OpenSHMEM 1.0版本的说明书[138,223]和参考实现都已发布,1.1版本正在进行中。
OpenSHMEM描述了用户可以用来编程数据传输(如用消息传递模型[120,170,200,201]所做的)和同步(如用共享存储模型所做的)的API。然而,它的数据结构和指针允许对跨节点内存分区进行全局访问,正如通过分段全局地址空间模型(Partitioned Global Address Space,PGAS)[48]所能做到的。最后,OpenSHMEM可用最小的开销展示底层硬件能力,以便用作实现本书介绍的其他编程模型的基础,但这种有效性也要做出一定程度的让步。消息传递和PGAS模型提供一些隐式的同步保证,但OpenSHMEM将数据传输和同步解耦合,将在算法中设计适当同步机制的负担加给了用户,虽然看上去这是个重要的缺陷,但数据传输和同步解耦的优势使OpenSHMEM及其由SHMEM派生出的前身特别适合于设计极其异步可扩展的软件系统。