leading dimension

2024-02-17 23:48
文章标签 dimension leading

本文主要是介绍leading dimension,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

矩阵空间是 3x4,其左上角有一个子矩阵2x3,表示如下


11 22 33 0

44 55 66 0

0   0    0   0


i, j分别表示行索引,列索引

如果用列存储的话,leading dimension = 3(矩阵空间的行个数), 换算公式是i + j *ld

11 44 0 22 55 0 33 66 0 0 0 0


如果是用行存储, leading dimension = 4(矩阵空间的列个数),换算公式是 i*ld + j


11 22 33 0 44 55 66 0 0 0 0 0


cublas中矩阵用列存储表示,cusparse中的矩阵用行CNC表示



在cuda中二维数组是按照列存储的,在c中二维数组按照行存储,在c语言中的一个矩阵(二维数组)A = M X K, B = N X K, C = A * Bt = M x N


对于cuda而言(列存储),看到的A矩阵是K x M, B 是 K x N, 计算的C = Bt * A = N x M

计算结果C矩阵在c语言看来就是按照行存储的 M x N


在cuda中,对于A矩阵,不论在cublasSgemm, 是trans还是non-trans,其leading dimension就是 K, 同理对于矩阵B,是转置还是不转置,leading dimension都是K




在cuda中

 设 A' = B = K x N , B' = A = K x M


transa = CUBLAS_OP_T

transb = CUBLAS_OP_N




m = op(A')_row = N

n = op(B')_col = M

k = op(A')_col = op(B')_row = K





lda = A'_row = K

ldb = B'_row = K

ldc = C_row = N




在c语言中有上图的矩阵,矩阵空间是 M x N, 但是只用到了mxn的子矩阵


对cuda而言,它看到的矩阵空间是NxM, 子矩阵是nxm


调用cublasSgemm,m,n,k都是用子矩阵的大小维度,但是lda = N


总结就是,gemm中的n,m,k都是计算的在cuda视角下子矩阵的维度,随着矩阵转置与否变化,但是lda是在cuda视角下矩阵空间的row的大小,并且不随矩阵转置与否变化


参考http://stackoverflow.com/questions/14595750/transpose-matrix-multiplication-in-cublas-howto


The problem is simple: I have two matrices, A and B, that are M by N, where M >> N. I want to first take the transpose of A, and then multiply that by B (A^T * B) to put that into C, which is N by N. I have everything set up for A and B, but how do I call cublasSgemm properly without it returning the wrong answer?

I understand that cuBlas has a cublasOperation_t enum for transposing things beforehand, but somehow I'm not quite using it correctly. My matrices A and B are in row-major order, i.e. [ row1 ][ row2 ][ row3 ]..... in device memory. That means for A to be interpreted as A-transposed, BLAS needs to know my A is in column-major order. My current code looks like below:

float *A, *B, *C;
// initialize A, B, C as device arrays, fill them with values
// initialize m = num_row_A, n = num_row_B, and k = num_col_A;
// set lda = m, ldb = k, ldc = m;
// alpha = 1, beta = 0;
// set up cuBlas handle ...

这篇关于leading dimension的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719358

相关文章

Dimension out of range 等报错解决,可以加拼接后的深度特征提取了

报错 Extracting test features for class bagel: 0%| | 0/110 [00:00<?, ?it/s]Traceback (most recent call last):File "/home/cszx/c1/zgp/3D-ADS-main/patchcore_runner.py", line 46, in evaluatemet

理解缓慢变化维(Slowly Changing Dimension)

“缓慢变化维度”是在构建数据仓库时比较常见的一种情况。简而言之它适用于这种情况——数据记录会随着时间而发生变化。 举个例子: Larry是S公司的一个职员。他居住在上海,于是查找用户表有以下记录: Record IDNameLocate1001 LarryShanghai 在一段时间以后,Larry被派遣到了北京的分公司工作。那么S公司如何更新员工信息表以反映出这次

SSIS--- 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

看文章之前先了解----缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计:http://blog.csdn.net/u012071918/article/details/77533025 2013-10-16 00:09 by BIWORK, 6661 阅读, 14 评论, 收藏, 编辑 开篇介绍 关于 Slowly Changing Dim

SSIS+数据仓库系列--- 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据仓库中,哪些数据应该随之变化,哪些可以不用变化?考虑到这些变化,在数据仓库中的维度表又应该如何设计以满足这些需要。 很显然在业务数据库中数据的变化是非常自然和正常的,比如顾客的联系方式,手机号码

uva 11029 - Leading and Trailing(快速幂)

题目链接:uva 11029 - Leading and Trailing 题目大意:给出一个n和k求n^k的前三位数和后三位数。 解题思路:后三为数可以用分治的方法(快速幂)去做,可是前三位数就比较麻烦了,看了别人的题解. n^k = 10 ^ (k * log10(n)),所以可以将多余的位数移到小数点后面然后舍弃掉,只保留前三位,pow(10, 2 + fmod(k * l

解决: tar: Removing leading `/‘ from member names

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.  我的情况 。 使用绝对路径 执行 tar 命令: tar -zcvf clientOne.tar /root/jiangyu/projects/springCloud/clientOne/springcloud-clientOne/ 报错如题: 2. 解决。 修改 t

Datacamp 笔记代码 Unsupervised Learning in Python 第三章 Decorrelating your data and dimension reduction

更多原始数据文档和JupyterNotebook Github: https://github.com/JinnyR/Datacamp_DataScienceTrack_Python Datacamp track: Data Scientist with Python - Course 23 (3) Exercise Correlated data in nature You are gi

大规模敏捷SA(Leading SAFe)证书是什么意思?如何报名,含金量高吗?

大规模敏捷SA(Leading SAFe)证书是什么意思? 常规的敏捷框架适用于中小型项目团队,而且不具有扩展性。基于常规的敏捷框架,SAFe定义了一个可扩展的敏捷框架模型,它适用于大型团队的合作开发,可以提高团队之间的协作性,降低团队管理的复杂性。 SAFe是目前国际上最流行的规模化敏捷方法,将敏捷实践从团队级(team level)有效扩展到项目群级(program level)乃至企业级

LightOJ 1282 Leading and Trailing

题意:求n^k的前三位和后三位。(n,k为大数) 分析: 后三位可以用快速幂得到(不足三位要补领0)。重点是求前三位。 n可以写成10^a(a为小数)的形式。因此 n^k = 10^(ak). 而ak可以写成x+y,其中x为ak的整数部分,y为ak的小数部分.其中x决定了位数,y决定了值。 因此只需求出y。 而n=10^a ,所以 a=log10(n) 这里用到了fmod函数,fmod(

dimension reduce(梯度下降)self-organizing maps(自组织映射)

使数据集的维度减小可以简化问题,带来优化 如更快的处理时间、虚拟化高维度的数据集、抗噪音、增强其他数据挖掘算法 线性降维(Linear dimension reduce) main linear components能使数据在这一轴的变化范围最大 1-st component是使数据在这一维变化最大的轴方向 2-nd component是当投影到1-st component方向时数