集群中OpenMP与隐式数据分布的高效实现
1. OpenMP与GA程序示例及同步构造翻译问题
首先给出一个OpenMP程序示例及其对应的GA程序示例。在这个例子中,生成的代码基于进程ID计算迭代集。数组A在第二维采用块分布,每个处理器分配一组连续的列。对于全局数组A的非本地元素,通过 get 操作获取并进行同步,循环边界替换为本地边界,之后再通过 put 操作将非本地数组元素放回并同步。
然而,同步构造(如 CRITICAL 、 ATOMIC 和 ORDERED )以及顺序程序部分(并行区域外的串行区域、OpenMP的 SINGLE 和 MASTER )的翻译可能并不简单。在转换为GA程序时,需要在GA进程间插入同步操作。虽然GA有多种同步特性,但转换后的代码可能效率不高。
2. 顺序区域的实现策略
对于OpenMP代码中顺序区域内的语句,包括I/O操作、控制流构造(如 IF 、 GOTO 和 DO 循环)、过程调用和赋值语句,采用以下不同策略进行翻译:
- I/O操作 :直接翻译顺序部分可使用独占主进程执行,适合I/O操作等部分构造。虽然GA允许并行I/O,但将OpenMP顺序I/O转换为GA并行I/O是一个挑战。
- 控制流构造 :如果控制流构造包含或被并行区域
超级会员免费看
订阅专栏 解锁全文
30

被折叠的 条评论
为什么被折叠?



