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

推荐订阅源

IT之家
IT之家
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
Kaspersky official blog
V
Visual Studio Blog
博客园 - 聂微东
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
C
Check Point Blog
H
Heimdal Security Blog
The GitHub Blog
The GitHub Blog
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
AI
AI
The Register - Security
The Register - Security
SecWiki News
SecWiki News
Help Net Security
Help Net Security
T
Troy Hunt's Blog
V
V2EX
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Forbes - Security
Forbes - Security
P
Privacy International News Feed
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Recorded Future
Recorded Future
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 司徒正美
博客园 - 叶小钗
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理
S
Security @ Cisco Blogs
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
V2EX - 技术
V2EX - 技术
The Cloudflare Blog
Jina AI
Jina AI
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
Webroot Blog
Webroot Blog
美团技术团队
N
News and Events Feed by Topic
小众软件
小众软件
Google DeepMind News
Google DeepMind News
G
GRAHAM CLULEY
阮一峰的网络日志
阮一峰的网络日志
B
Blog

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

【琐记】烟火与尘埃 【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 【AI编译】张量生命周期管理 SystemC 用寄存器同步建模方法 【脉动阵列】脉动阵列类型 【im2col】AScend conv accelerate 【感想】写作进度报告4 【BYOC】TVM添加自定义编译器 ccompiler 【感想】写作进度报告3 【Tengine】推理流程脑图【2】 【Tengine】推理流程脑图【1】 【NCNN】学习ncnn模型转换 【编译器】使用llvm编译自定义语言【3】编译 object 【编译器】使用llvm编译自定义语言【2】转llvm IR 【编译器】使用llvm编译自定义语言【1】构建AST 【AI编译】如何进行内存分配 【感想】写作进度报告2 【AI编译】layer-group之后如何tiling 【AI编译】如何进行layer-group 【量化】连续卷积层首尾量化的可行性 【Gemm】内存对齐 【gemm】Gemm计算加速 【TVM】通过代码学习编译流程【5】FuseOps 【TVM】通过代码学习编译流程【6】CodeGen 【TVM】通过代码学习类【3.5】Pass 【TVM】通过代码学习编译流程【4】BuildRelay 【AI编译】Tiling操作能优化什么时间 【TVM】通过代码学习编译流程【3】模型编译 【TVM】通过代码学习编译流程【2】模型转换 【TVM】通过代码学习编译流程【1】必要知识 【感想】写作进度报告1 【Winograd】卷积加速算法原理及实现 SystemC 等待异步事件解决方案 【TVM】Python脚本实现模型编译和保存 【推理引擎】常见AI推理框架 【3D建模】T110E3卡迪夫蓝调皮肤模型 【TVM】C++部署运行TVM 【推理引擎】NCNN和Tengine量化推理逻辑对比 【3D建模】IS-7攻城锤流纹岩皮肤展示 【TVM】根据例子走通代码库 博客汇总目录 【Im2Col】卷积加速算法【2】NHWC 【Im2Col】卷积加速算法【1】 NCHW C语言工程调用Cpp库解决方案 foo Hello World
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,并指明哪一篇博客,我看到一定及时回复!