OpenMP自动作用域与工作共享实现的评估与分析
一、Polaris编译器的自动作用域功能
Polaris是一个循环级并行化工具,它在处理循环变量作用域时遵循一定规则。若能确定循环中所有变量的作用域,就会为该区域添加合适的指令;若无法确定,则将该区域串行化。不过,若用户为区域中的某些变量明确指定了作用域,这些指定会覆盖Polaris的判定结果,甚至在Polaris无法确定作用域时也适用。而且,使用显式作用域指定可能让Polaris成功自动作用域原本需要串行化的循环。
需要注意的是,Polaris只能对具有 !$OMP PARALLEL DO 语义的区域进行自动作用域,对于一般的单程序多数据(SPMD)并行区域则无能为力。而Sun编译器采用数组数据竞争检测方法来处理一般的并行区域,而非传统的基于循环的依赖分析。
二、DEFAULT(AUTO)的评估
为评估Polaris编译器中 DEFAULT(AUTO) 的实现效果,我们对SPEC OpenMP基准测试套件中的Fortran 77基准测试进行了自动作用域处理。具体操作如下:
1. 手动修改applu、apsi、mgrid、swim和wupwise,使所有区域都包含 DEFAULT(AUTO) 指令,且不明确指定任何变量的作用域。
2. 使用修改后的Polaris版本对这些基准测试进行自动作用域处理。
3. 同时,使用Sun Studio 9 Fortran 95编译器的早期访问版本对相同程序进行自动作用域处理。
为评估使用Polaris自动作用域导致的加速比损失,我们在
超级会员免费看
订阅专栏 解锁全文
20

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



