Page 18 - 《软件学报》2021年第8期
P. 18
2300 Journal of Software 软件学报 Vol.32, No.8, August 2021
Fig.8 Optimized HBLIS GEMM control-tree
图 8 优化后的 HBLIS GEMM control-tree
4.2 Level-1和Level-2级BLAS并行优化
原 BLIS 库没有实现 Level-1 级和 Level-2 级 BLAS 函数运算的并行化.本文使用如下相似的策略实现了
DGEMV、DTRSV、DSCAL、DAXPY 以及 IDAMAX 运算的并行化:
(1) 通过运行脚本中设置的环境变量“OMP_NUM_THREADS”获取当前 MPI 进程中的线程数.
(2) 将矩阵或向量中的某个维度按设置的线程数进行切分.
(3) 最后使用 OpenMP 的 Pragma(编译指示)启动多线程,在不同的线程空间中复用同一段汇编 kernel 来处
理不同的数据.在 Pragma 包裹的并行域(parallel region)中需要合理而准确地为每个线程划分任务空间.可以通
过 omp_get_thread_num()函数获得当前线程的线程编号(TID)划分任务,避免计算冲突.
多线程并行对于 BLAS 运算的性能提升是非常显著的,矩阵或向量计算达到一定规模后,性能往往随着线
程数的增加而提升,但提升并不会完全是线性的,通常是计算越密集的运算,提升的线性程度越高,因此计算量
最大的 Level-3 级 BLAS 运算通过多线程并行会大大提升性能.如图 9 所示,在 N=43776 时的 Level-1 运算
IDMAX 随着线程数的增加表现出性能的提升.
Fig.9 Performance improvement by multi-threading of IDAMAX
图 9 多线程对 IDAMAX 的性能提升