OpenMp和自动并行化
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页
- 并行化
两种在open64中获得粗粒度并行化的方法:OpenMP和自动并行化。前者使用选项-mp来指导并行化,在Fortran,C和C++中支持OpenMP2.5。后者需要选项-apo打开,功能是在LNO阶段检测并行的循环并插入指导。在同一个编译中,可以两个同时使用。
- 对粗粒度并行化的支持
并行化的代码给出它自己函数的轮廓(?),轮廓函数嵌入到原始过程中,原始过程中的本地变量采用静态链的方式访问,指向轮廓函数的指针被传到libopenmp中的同步机制中用来做定型执行的调度。其中会有一段并行的代码保存下来以备串行执行之用
- 并行运行时执行
通过大量产生线程来达到执行并行代码区域的效果,默认情况下的线程数是CPU的个数,libopenmp(PathScale专利)包含:线程控制和同步机制和OpenMP intrinsic相关机制.运行时的动作通过环境变量控制,如指定线程和处理器之间的亲和性
- OpenMP 编译过程
首先前段将OpenMP直接翻译成WHIRL OMP编译指示和范围节点,然后OpenMP预lower(be/be/omp_lower.cxx),这一步在VHO后IPL前执行,对OpenMP的编译指示做初步的lower–使用OpenMP库中的例程调用代替intrinsics;接着做MP lowering(be/com/wn_mp.cxx),这一步在LNO之后WOPT之前执行,并行区域被扩充到多个例程中,每个例程都嵌入在原始函数中,并包含向上的对本地母函数的引用,还要插入代码在运行时决定并行还是串行执行,若并行,则调用OpenMP运行时库来产生大量线程执行并行代码,若串行则执行剩下的串行程序代码.大多数的OpenMP编译指示在这一步被删除.
- 较早阶段的MP
是指当应用在LNO相关的MP lowering时,默认便已是用较晚的MP,MP的lowering多应用在LNO之后,LNO在有MP编译指示时运行–MP编译指示的出现让LNO的转换更加保守.选项-OPT:early_mp=on作用在较早的MP上,LNO引用并行例程时,若无MP编译指示,则使更激进的优化成为可能,附加的调用可能会抑制一些优化,在-apo选项下并不起作用.
整个Open64课程系列的文章包括以下,请阅读中指正
Open64课程-简介,概述和中间表示
Open64课程- 编译过程
Open64课程-内联
Open64 课程–全局标量优化(WOPT I) part 1
Open64 课程–全局标量优化(WOPT I) part II
Open64 课程–全局标量优化(WOPT II)
open64课程–过程间分析优化(IPA)
Open64课程—代码生成(CG)
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页

[...] Open64课程–OpenMp和自动并行化 – 198 views [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
我去下来看看,3Q~
open64只做了openmp的自动并行化,有做mpi的么?
orc有没有?虽然两个基本同源
@小丁, 我刚刚grep了一下open64的源码,是有MPI的支持的,德拉华大学的人已经做了相关的工作,请google搜索《Implementing an Open64-based Tool for Improving the Performance of MPI Programs》。我没有详细看过这篇文章,所以不了解具体内容。
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]
[...] Open64课程–OpenMp和自动并行化 [...]