指路原博:OpenBlas多线程使用教程(含测试代码)
OpenBLAS的编译运行可参考:https://github.com/xianyi/OpenBLAS/blob/develop/USAGE.md
一、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为单线程)
网友评论