利用 MPI 编写并行库:实践、问题与扩展
1. 引言
模块化和抽象结构化编程是软件开发中的重要概念,而库是实现这些技术的常用手段。库可从通用语言中调用,提供特定功能,能简化软件开发过程,隐藏并行算法设计的复杂性。高性能库还能提供性能可移植性,隐藏特定架构的优化细节。重用库可提高生产力并减少错误。
本文将探讨在消息传递接口(MPI)背景下设计和开发并行库的原则,回顾 18 年前引入的特性,补充新发现的原则和接口问题,并讨论经验教训。同时分析当前实践以及先进库如何使用提供的抽象。
2. 模块化分布式内存编程
模块化编程在“基于组件的软件工程(CBSE)”中起着重要作用,它建议通过组合大型组件进行编程。串行和并行库应具备一些理想属性,如广泛的领域覆盖、一致性、易学易用、组件效率、可扩展性、可集成性、直观性、健壮性和良好的支持。
在分布式内存编程中,除了这些属性,还需要控制多个资源(处理元素)。开发分布式库的一些重要语言技术包括:
- 类 :可重用组件应围绕数据结构而非动作结构组织。
- 信息隐藏 :库可使用彼此的功能,但内部结构应保持隐藏,避免模块间的“串扰”。
- 断言 :通过断言表征库的语义属性。
- 继承 :可作为模块包含工具和子类型机制。
- 可组合性 :特别是性能可组合性和功能正交性,这需要查询某些对象的相关状态。
常见的并行库类型有:
1. 空间