前所未有的详细总结 BLAS(一):GEMM Routine(零)
高性能计算例程:GEMM (零)
一、背景:
- GEMM(General Matrix Multiplication)全称为“通用矩阵乘法”;
- GEMM是BLAS(Basic Linear Algebra Subprograms)中Level 3的例程,也是整个BLAS最重要的例程之一;
二、例程(以double类型为例):
1.功能:
计算 α∗A′∗B′+β∗C\alpha*A'*B'+\beta*Cα∗A′∗B′+β∗C的值,然后将结果存入C中,
即:
C⟵α∗A′∗B′+β∗CC\longleftarrow \alpha*A'*B'+\beta*CC⟵α∗A′∗B′+β∗C
其中:
(1)α和β为标量常数\alpha \text{和} \beta \text{为标量常数}α和β为标量常数
(2)A′=op(A)={A,op is no transposeAT,op is transposeA'=op(A)=\left\{ \begin{aligned} &A & , & \text{op is no transpose} \\ &A^T& , & \text{op is transpose} \\ \end{aligned} \right. A′=op(A)={AAT,,op is no transposeop is transpose
(3)B′=op(B)={B,op is no transposeBT,op is transposeB'=op(B)=\left\{ \begin{aligned} &B & , & \text{op is no transpose} \\ &B^T& , & \text{op is transpose} \\ \end{aligned} \right. B′=op(B)={BBT,,op is no transposeop is transpose
(4)A′is kby m: (A′)m×kA' \text{ is }k\text{ by } m \text{ : }\qquad (A')_{m \times k}A′ is k by m : (A′)m×k
(5)B′is nby k: (B′)k×nB' \text{ is }n\text{ by } k \text{ : }\qquad (B')_{k \times n}B′ is n by k : (B′)k×n
(6)Cis nby m: (C)m×nC \text{ is }n\text{ by } m \text{ : }\qquad (C)_{m \times n}C is n by m : (C)m×n
即:
C=α∗op(A)∗op(B)+β∗CC =\alpha*op(A)*op(B)+\beta*CC=α∗op(A)∗op(B)+β∗C
2.例程:
void cblas_dgemm
(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa,const CBLAS_TRANSPOSE transb, const CBLAS_INT m, const CBLAS_INT n, const CBLAS_INT k, const double alpha,const double *a, const CBLAS_INT lda, const double *b, const CBLAS_INT ldb, const double beta, double *c, const CBLAS_INT ldc
);
参数说明:
(1) const CBLAS_LAYOUT Layout:
矩阵的存储方式:列优先或者行优先。
列优先:Column-Major
行优先:Row-Major
作者(我 E2MCC)补充:
其实矩阵的有多种存储方式,如块行优先存储,块列优先存储,对于稀疏矩阵而言还有 COO(Triplet) CSC CSR ELL DIA 等存储方式。这里的 ColMaj 和RowMaj 是最常见的稠密矩阵的基本存储方式。(2) const CBLAS_TRANSPOSE transa:
对 AAA 进行转置操作:转置或不转置(Transpose AAA or not)(3) const CBLAS_TRANSPOSE transb:
对 BBB 进行转置操作:转置或不转置(Transpose BBB or not)(4) const CBLAS_INT m:
m 表示实际运算时 AAA 矩阵的行维度(行数),也就是 op(A)(A)(A) 的行维度;
当然也是结果矩阵 CCC 的行维度(行数)。(5) const CBLAS_INT k:
k 表示实际运算时 AAA 矩阵的列维度(列数),也就是 op(A)(A)(A) 的列维度;
同时也是实际运算时 BBB 矩阵的行维度(行数),也就是 op(B)(B)(B) 的行维度。(6) const CBLAS_INT n:
n 表示实际运算时 BBB 矩阵的列维度(列数),也就是 op(B)(B)(B) 的列维度;(7) const double alpha:
常数项 α\alphaα。(8) const double * a :
a 为一个指针,指向 AAA 矩阵数据在内存中的位置。(9) const CBLAS_INT lda:
Leading Dimension of A:表示 AAA 矩阵数据在内存中存储时的步长。
注意:这里 lda 是指的 A 的 leading dimension 而不是 op(A)(A)(A)的 leading dimension。(10) const double * b:
b为一个指针,指向 BBB 矩阵数据在内存中的位置。(11) const CBLAS_INT ldb:
Leading Dimension of B:表示 BBB 矩阵数据在内存中存储时的步长。
注意:这里 ldb 是指的 B 的 leading dimension 而不是 op(B)(B)(B)的 leading dimension。(12) const double beta:
常数项 β\betaβ。(13) double * c:
c 为一个指针,指向 CCC 矩阵数据在内存中的位置。(14) const CBLAS_INT ldc:
Leading Dimension of C:表示 CCC 矩阵数据在内存中存储时的步长。
注意:这里 ldc 是指的 C 的 leading dimension 而不是 op(C)(C)(C)的 leading dimension。
3.Leading dimension详细解释
(1)leading dimension 是什么?
leading dimension 是二维逻辑矩阵映射到一维内存空间时的映射方程的系数。
(2)为什么要使用leading dimension?leading dimension和m,n,k有什么区别?
当A矩阵就是一整个矩阵时,leading dimension确实为A矩阵的行数或者列数,但是若A矩阵仅仅只是一个更大的矩阵中的一部分时,那么leading dimension 必定不等于A的行数或列数了。如下图所示:
前所未有的详细总结 BLAS(一):GEMM Routine(零)相关推荐
- 前所未有的详细总结 BLAS (零)
前所未有的详细总结 BLAS (零) 一.BLAS例程的命名约定(Naming Conventions for BLAS Routines) 0. BLAS例程名称具有以下结构: <数据类型&g ...
- BLAS之GEMM和GEMV
BLAS简介 BLAS全称是Basic Linear Algebra Subprograms是规定了一套低级的执行常见线性代数操作的规范.其实现经常针对特殊的机器进行优化,比较著名的·BLAS库有AC ...
- i7 3960x支持服务器内存吗,i7 3960x 性能如何?—前所未有的详细版测评
从目前Intel公布的资料来看,SNB-E首发将会有三款新产品诞生,他们分别是:4核心8线程倍频部分解锁的i7-3820,它的定位类似与LGA 1366接口的i7-980类似;然后是不锁倍频的i7-3 ...
- CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 零基础开发
CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 大家中秋国庆快乐哈 前言 老规矩先看效果 源码的获取方式在最下面 对于本游戏来说canvas这样设置最佳哦 游戏实现思路: ...
- 【语义分割】评价指标:PA、CPA、MPA、IoU、MIoU详细总结和代码实现(零基础从入门到精通系列!)
文章目录 引言 1 混淆矩阵 2 语义分割 PA:像素准确率 CPA:类别像素准确率 MPA:类别平均像素准确率 IoU:交并比 MIoU:平均交并比 3 综合实例 步骤一:输入真实.预测图片 步骤二 ...
- 最最最详细的C语言教程笔记零起步(10)进阶必备 同笔者一起学习
C语言教程笔记 二十二. 输入输出缓存 1. 探究printf的现象 1.1 windows系统上的代码 1.2 linux系统上的代码 1.3 windows系统上的表现 1.4 linux系统上的 ...
- 从零搭建vue-ssr详细介绍
ssr是用vue开发中一个常见且复杂的问题,虽然官方推出nuxt来解决此问题,但是了解ssr的原理也是很有必要的,网上也有很多vue-ssr相关的介绍,但是大多讲的不够详细. 这里我将从零搭建一个vu ...
- Deep Learning:基于pytorch搭建神经网络的花朵种类识别项目(内涵完整文件和代码)—超详细完整实战教程
基于pytorch的深度学习花朵种类识别项目完整教程(内涵完整文件和代码) 相关链接:: 超详细--CNN卷积神经网络教程(零基础到实战) 大白话pytorch基本知识点及语法+项目实战 文章目录 基 ...
- leading dimension
矩阵空间是 3x4,其左上角有一个子矩阵2x3,表示如下 11 22 33 0 44 55 66 0 0 0 0 0 i, j分别表示行索引,列索引 如果用列存储的话,leading d ...
最新文章
- GDI编程注意点-1
- 全球 android手机排行 2013,全球Android手机性能排行 三星Note 3夺魁
- 关于通配泛型类型有几种_5.7 泛型通配符和类型参数的范围
- 360浏览器卸载_陈蛋蛋碎碎念—如何完美地卸载流氓软件
- 终于,我读懂了所有Java集合——map篇(多线程)
- mysql事务处理什么意思_mysql事务是什么意思
- 失心漂亮的个人html引导页面源码
- java smtp服务器,用Java实现SMTP服务器
- 如何使用Global Mapper分幅导出地图
- 性能退化评估 matlab,LED驱动电源性能退化参数监测及寿命预测方法研究
- Contrastive Multiview Coding
- Python批量采集百度相关搜索词教程
- 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(11)——XXX定理
- 爬取公众号的文章,同时处理图片不显示问题(JAVA)
- 微信小程序开发之实现一个弹幕评论
- 二进制逆向实验——寻找flag
- 如何让PDF转换成Excel
- 我的世界它最懂 华为nova7系列打造5G自拍旗舰
- iis7 php 403,详解Nginx 出现 403 Forbidden 的解决办法
- 《Learning Unsupervised Metaformer for Anomaly Detection》论文阅读笔记
热门文章
- 一款可以对接多用户商城系统的客服系统
- pdnovel.php,辰小阳很出名吗
- 全媒舍:网站搭建所具有的宣传效果和宣传模式有关
- android 异常leaked intentreceiver
- 海门区教育科学规划2020年度课题成果鉴定申请表
- ShaderWeaver使用教程-官网信息
- dream weaver_具有定制汇编程序,Weaver和运行时的可插拔知识
- Freebsd + wine1.1.9 + 国元网上证券交易(通达信版)
- Android应用接入第三方登陆之新浪微博
- 搜狗CEO王小川自述:如何用“三级火箭”杀出重围!