惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
博客园_首页
T
Tailwind CSS Blog
美团技术团队
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 聂微东
S
SegmentFault 最新的问题
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
N
Netflix TechBlog - Medium
Jina AI
Jina AI
WordPress大学
WordPress大学
U
Unit 42
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog

Пусть этот камень будет более крепким, чем человек

【MLIR】Transform Dialect【0】保持计算结构 【MLIR】跟着Toy语言学习MLIR【6】支持复合结构类型 【MLIR】跟着Toy语言学习MLIR【5】降级到LLVM及CodeGen 【MLIR】跟着Toy语言学习MLIR【4】部分降级到低层方言 【MLIR】跟着Toy语言学习MLIR【3】通过接口实现通用转换 【MLIR】跟着Toy语言学习MLIR【2】pattern匹配和重写 【MLIR】跟着Toy语言学习MLIR【1】Toy语言和 Toy Dialect 【琐记】你的爱好能坚持多少年 【琐记】烟火与尘埃 【Triton】Triton实现矩阵乘 【LLM推理加速】FlashAttention 【LLM推理加速】PagedAttention 【LLM推理加速】Online Softmax LLM基础知识【1】 Transformer模型 【AI编译】LayerGroup Tiling Tile的疑惑和思考 【AI编译】深度优先的Tile调度,万事大吉? 【AI编译】多级流水线Tile调度策略 【CUDA C++】GPU内存使用【3】 【AI编译】Cache缓存地址映射 【CUDA C++】GPU存储【2】 【CUDA C++】GPU基本介绍【1】 【00】0序章-不受欢迎的来客 【转载】我来了——持续低熵 【Halide】调度优化【2】 【感想】写作进度报告5 【Halide】调度优化【1】 【转载】北大中文男足战报2 【BYOC】TVM切分子图 【转载】北大中文男足战报1
openBlas库的安装与简单使用
Post author: XianMu@Пусть этот камень будет более крепким, чем ч · 2024-05-15 · via Пусть этот камень будет более крепким, чем человек

# 编译

在官网上下载 zip 或通过 git 下载:

weget https://github.com/OpenMathLib/OpenBLAS.git

将文件解压后进入工程主目录

编译 openblas 库

h
make -j32

导出 依赖库

make install PREFIX=/path/to/your/admire

# cblas_sgemm 函数

c
cblas_sgemm(order, transA, transB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC);
order : ClasRowMajow 行优先  ClasColMajow 列优先
transA : CblasTrans  转置     CblasNoTrans 不转置
transA : CblasTrans  转置     CblasNoTrans 不转置
M : 表示 A或C的行数。如果A转置,则表示转置后的行数    A的行数(transA处理之后)
N : 表示 B或C的列数。如果B转置,则表示转置后的列数    B的列数(transB处理之后)
K : K = A的列数 = B的行数
ALPHA : ALPHA(A*B)+BETA*C  矩阵权重
A : 输入矩阵A  (M*K)
LDA : A所在矩阵的列数   有可能 LAD>K
B : 输入矩阵B  (K*N)
LDB : B所在矩阵的列数   有可能 LDB>N
BETA : ALPHA(A*B)+BETA*C  偏置权重
C : 偏置C  同时也是输出C  (M*N)
LDC : C所在矩阵的列数   有可能 LDC>N

# 使用例子

#include <vector>
#include <iostream>
#include <cblas.h>
using namespace std;
int main() {
    const int M=4;
    const int N=2;
    const int K=3;
    const float alpha=1;
    const float beta=0;
    const int lda=K;
    const int ldb=N;
    const int ldc=N;
    const float A[M*K]={1,2,3,4,5,6,7,8,9,8,7,6};
    const float B[K*N]={5,4,3,2,1,0};
    float C[M*N];
    
    cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
    
    for(int i=0;i<M;i++){
        for(int j=0;j<N;j++){
            cout<<C[i*N+j]<<" ";
        }   
        cout<<endl;
    }  
}

对应的 CMakeLists.txt 文件

cmake_minimum_required (VERSION 3.5)
project (demo)
include_directories (${PROJECT_SOURCE_DIR}/include
                    /path/to/your/admire/include)
find_library(OpenBlas_Lib openblas HINTS /path/to/your/admire/lib)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src   SRC_FILE)
set (SRC_FILE ${PROJECT_SOURCE_DIR}/src/test.cpp)
add_executable (demo ${SRC_FILE})
target_link_libraries (demo ${OpenBlas_Lib} m)

在工程主目录

mkdir build && cd build
cmake ..
make
./demo

# 后记

本博客目前以及可预期的将来都不会支持评论功能。各位大侠如若有指教和问题,可以在我的 github 项目 或随便一个项目下提出 issue,并指明哪一篇博客,我看到一定及时回复!