流求解器TFS的嵌套并行化及OpenMP在多核芯片架构上的性能特性
流求解器TFS的嵌套并行版本
在流求解器TFS的并行化中,版本5通过合并之前的块间和块内并行版本,并使用嵌套OpenMP并行性,实现了更高效的并行执行,每个级别使用少量处理器。在这个新版本中,无法对公共块使用THREADPRIVATE指令,而是将受影响的变量作为额外参数传递到必要的例程中,然后将其定义为外部(块间)并行区域的PRIVATE变量,但由后续内部(块内)并行区域共享。
对于大多数应用代码,当外部块循环和内部网格维度循环都并行时,启用OpenMP嵌套并行性,并将线程数设置为用户请求的总线程数的平方根(因为两个级别分配的线程数相同)。对于只包含单级并行性的代码部分,线程数设置为用户请求的数量。
结果表明,嵌套版本优于之前的并行版本,在16个处理器上加速比为7.39,在25个处理器上为8.71。然而,在大量处理器上的开销与OpenMP运行时开销和不同块之间的负载不平衡有关。例如,性能不佳的块交互循环必须串行执行,以及一两个小代码部分由于利用并行性时OpenMP开销导致速度减慢而保留为串行。那些利用块间级并行性但不利用块内级并行性的代码部分,在串行运行时只占运行时间的一小部分,但在大量处理器上对加速比的影响更为显著(阿姆达尔定律)。
提高嵌套并行程序的可扩展性
通过对不同机器上块内、块间和嵌套并行版本的最佳加速比进行分析,可以明显看出嵌套方法在所有较大的SMP机器上都能提高加速比。在SFE25K机器上使用64个线程时,最大加速比接近20,而单级方法的加速比在所有情况下都小于10。在NECSX8向量机器上,向量化取代了循环级OpenMP并行化,块级并行化在使用8个线程时
超级会员免费看
订阅专栏 解锁全文
2万+

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



