美文网首页
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