高性能计算例程:GEMM
2021/9/3 23:10:47
本文主要是介绍高性能计算例程:GEMM,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
高性能计算例程:GEMM
一、背景:
- GEMM(General Matrix Multiplication)全称为“通用矩阵乘法”;
- GEMM是BLAS(Basic Linear Algebra Subprograms)中Level 3的例程,也是整个BLAS最重要的例程之一;
二、例程(以double类型为例):
1.功能:
计算
α
∗
\alpha*
α∗op
(
A
)
∗
(A)*
(A)∗op
(
B
)
+
β
∗
C
(B)+\beta*C
(B)+β∗C的值,然后将结果存入C中。
即:
C
=
α
∗
C =\alpha*
C=α∗op
(
A
)
∗
(A)*
(A)∗op
(
B
)
+
β
∗
C
(B)+\beta*C
(B)+β∗C
其中:
(1)
α
\alpha
α 和
β
\beta
β 为标量常数
(2)op
(
A
)
(A)
(A) 表示对矩阵
A
A
A 做一个操作,这个操作只有两个选项:什么多不做 或者 对
A
A
A进行转置。
(3)op
(
B
)
(B)
(B)同上
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:
对 A A A 进行转置操作:转置或不转置(Transpose A A A or not) -
(3) const CBLAS_TRANSPOSE transb:
对 B B B 进行转置操作:转置或不转置(Transpose B B B or not) -
(4) const int m:
m 表示实际运算时 A A A 矩阵的行维度(行数),也就是 op ( A ) (A) (A) 的行维度;
当然也是结果矩阵 C C C 的行维度(行数)。 -
(5) const int k:
k 表示实际运算时 A A A 矩阵的列维度(列数),也就是 op ( A ) (A) (A) 的列维度;
同时也是实际运算时 B B B 矩阵的行维度(行数),也就是 op ( B ) (B) (B) 的行维度。 -
(6) const int n:
n 表示实际运算时 B B B 矩阵的列维度(列数),也就是 op ( B ) (B) (B) 的列维度; -
(7) const double alpha:
常数项 α \alpha α。 -
(8) const double * a :
a 为一个指针,指向 A A A 矩阵数据在内存中的位置。 -
(9) const int lda:
Leading Dimension of A:表示 A A A 矩阵数据在内存中存储时的步长。
注意:这里 lda 是指的 A 的 leading dimension 而不是 op ( A ) (A) (A)的 leading dimension。 -
(10) const double * b:
b为一个指针,指向 B B B 矩阵数据在内存中的位置。 -
(11) const int ldb:
Leading Dimension of B:表示 B B B 矩阵数据在内存中存储时的步长。
注意:这里 ldb 是指的 B 的 leading dimension 而不是 op ( B ) (B) (B)的 leading dimension。 -
(12) const double beta:
常数项 β \beta β。 -
(13) double * c:
c 为一个指针,指向 C C C 矩阵数据在内存中的位置。 -
(14)const int ldc:
Leading Dimension of C:表示 C C C 矩阵数据在内存中存储时的步长。
注意:这里 ldc 是指的 C 的 leading dimension 而不是 op ( C ) (C) (C)的 leading dimension。
3.重点内容解释
这篇关于高性能计算例程:GEMM的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南