嵌套并行OpenMP应用程序的性能评估
1 引言
OpenMP在共享内存机器的高性能计算中越来越受欢迎,但其当前规范存在诸多限制。特别是,当前OpenMP规定嵌套并行是可选的,这意味着实现可以忽略在另一个并行指令执行期间遇到的并行指令。许多现有的OpenMP系统实际上不支持嵌套并行,或者仅基于负载内联提供非常有限的支持。
1.1 传统观点
- 收益方面 :假设在最外层循环中获得了足够的并行性,提取嵌套并行对整体性能没有好处。
- 成本方面 :嵌套并行的高效实现困难或复杂,因为它需要能够轻松处理大量线程的线程管理。像Pthreads或Win32线程这样的标准线程库不满足这一要求,它们在线程创建时会产生大量开销,并且无法容忍大量线程。
1.2 新观点
然而,我们认为嵌套并行的高效实现既有益(许多应用程序可以从中受益)又成本不高(其实现并非那么困难)。
- 收益 :嵌套并行支持最外层级别并行性不足的程序(如并行递归),更重要的是,它增强了并行库的性能透明度,促进了黑盒代码的重用。
- 成本 :并行编程语言社区的大量现有文献表明,嵌套并行和动态并行管理通常可以高效实现。特别是,我们之前关于细粒度线程库StackThreads/MP的工作表明,使用常规顺序编译器可以实现这一点,并且在串行执行时几乎不产生开销。
我们将StackThreads/MP引入到Omni(一个最初仅支持有限形式嵌套并行的OpenMP实现)
超级会员免费看
订阅专栏 解锁全文
6732

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



