中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Demo介绍

  1. Demo获取地址:matrix_multiplication,运行平台为基于鲲鹏920的服务器,物理核数为128核,操作系统为openEuler 20.03 (LTS)。
  2. Demo主要用于完成两个矩阵的相乘。
    图1 矩阵相乘示意
  3. 编译方式。

    主要使用Make,支持编译出两个二进制matmul_nokml,matmul。

    构建KML(Kunpeng Math Library)版本时,需要先安装鲲鹏数学库,并设定KML_INCLUDE和KML_LIB环境变量。

  4. Demo用法。
    ./matmul size method test_correctness
    • size:矩阵的行列大小,需要为2的次方,例如512, 1024, 2048, 4096等。
    • method:matmul_nokml可以使用0-5,matmul可以使用0-6。

    • test_correctness:如果选择true,则会对矩阵计算的准确性进行校验,默认为false。
    表1 method描述表

    method

    描述

    0 (base_matmult)

    基础串行计算。

    1 (parallel_matmult)

    在0(base_matmult)的基础上实现一般OMP并行计算。

    2 (transpose_B_matmult)

    在1 (parallel_matmult)的基础上增加矩阵转置优化。

    3 (change_loop_order_matmult)

    类似2(transpose_B_matmult)的优化, 通过改变计算循环方式。

    4 (block_transpose_B_matmult)

    在2(transpose_B_matmult)的基础上增加矩阵内部块循环优化。

    5 (intrinsics_transpose_B_matmult)

    在4(block_transpose_B_matmult)的基础上增加arm neno向量化计算优化。

    6 (kml_matmult)

    使用鲲鹏数学库优化。

    method 2和method 3是同一种优化手段的变体,是用于改进读取矩阵B的内存访问顺序。

  5. Demo默认使用float类型进行计算,增加编译选项“-DDOUBLE_TYPE”可使用double类型进行计算。
  6. 通过修改OMP_NUM_THREADS可以设定并行数,不设定时默认使用物理核数,使用method 6(block_transpose_B_matmult)时,需要显式指定并行数。