美文网首页
openBlas多线程使用教程

openBlas多线程使用教程

作者: 大疯疯疯子 | 来源:发表于2020-06-29 17:18 被阅读0次

    指路原博:OpenBlas多线程使用教程(含测试代码)

    OpenBLAS的编译运行可参考:https://github.com/xianyi/OpenBLAS/blob/develop/USAGE.md

    函数参考:http://netlib.org/blas/

    一、BLAS函数接口命名规范(可根据这个找到要调用的函数名称):

    该部分转自:https://blog.csdn.net/cocoonyang/article/details/63068108

    (1)根据运算对象不同,分为三个类

    Level1:

    Level 1 函数处理单一向量的线性运算以及两个向量的二元运算。

    接口函数名称由前缀+操作简称组成。

    例如:SROTG,其中:

    S         -- 标明矩阵或向量中元素数据类型的前缀;

    ROTG -- 向量运算简称。

    Level2和Level3:

    Level 2 函数处理 矩阵与向量的运算,同时也包含线性方程求解计算。

    Level 3 函数包含矩阵与矩阵运算。

    接口函数名称由前缀 + 矩阵类型 + 操作简称组成。

    例如: SGEMV,其中:

    S      -- 标明矩阵或向量中元素数据类型的前缀;

    GE   -- 矩阵类型

    MV   -- 向量或矩阵运算简称

    (2)BLAS库使用的矩阵类型

    GE - GEnearl  稠密矩阵

    GB - General Band 带状矩阵

    SY - SYmmetric    对称矩阵

    SB - Symmetric Band 对称带状矩阵

    SP - Symmetric Packed  压缩存储对称矩阵

    HE - HEmmitian     Hemmitian矩阵,自共轭矩阵

    HB - Hemmitian Band   带状Hemmitian矩阵

    HP - Hemmitian Packed  压缩存储Hemmitian矩阵

    TR - TRiangular      三角矩阵

    TB - Triangular Band  三角带状矩阵

    TP - Triangular Packed  压缩存储三角矩阵

    二、函数中参数的含义

    以下为openblas中双精度稠密矩阵向量乘函数,计算式为y=alpha*A*x+beta*y

    openBlas参数含义

    三、运行OpenBLAS程序

    我是在Linux 下编译运行的,需要自己链接,过程如下:

    1.编译:

    gcc ./dgemv_test.c-I/opt/software/libopenblas/include-L/opt/software/libopenblas/lib -o ./dgemv_test.out -lopenblas -lpthread

    (多线程需要链接到pthread)

    其中:-I(大写i)后面为 OpenBLAS 所需头文件 <cblas.h>所在的目录;-L后面为OpenBLAS的库文件所在的目录。

    2.设置线程数:

    在环境变量中设置线程数为n(自己取值,取1为单线程):

    export OPENBLAS_NUM_THREADS=4(已确认可行)。

    3.运行:

    ./dgemv_test.out

    注:该网站(https://github.com/xianyi/OpenBLAS/blob/develop/USAGE.md)给出了另外两种单线程方法,推测同理可设置多线程,但是没有继续尝试。

    可以将23步改成:

    a.make USE_THREAD=4(4自己设置线程数,取0为单线程)

    b../dgemv_test.out openblas_set_num_threads2(2自己设置线程数,取1为单线程)

    相关文章

      网友评论

          本文标题:openBlas多线程使用教程

          本文链接:https://www.haomeiwen.com/subject/fgcafktx.html