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 的性能提升
   13   14   15   16   17   18   19   20   21   22   23