
cublas
文章平均质量分 68
weixin_55083979
不断学习,持续更新,大家点点赞,加个收藏,小徐为大家持续更新!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Cuda编程之Cublas矩阵乘法运算cublasSgemm参数列表解析(三)
w矩阵的维度是[4,3],很显然这样的维度是不能直接y=x@w的,需要进行转置;很多文章里面写的m,n,k解释是m是A矩阵的行,n是B矩阵的列,k是A矩阵的列同时也是B矩阵的行,这是因为他是基于Trasformer里面多头注意力机制Q@K.T进行定义的,在这里我感觉容易给大家造成混淆并且难以与这里的cublas多种维度进行结合。w左矩阵在进行trans_op之前维度是[3,4],x右矩阵维度是[3,2],结果矩阵维度是[4,2]-->因此leading dimension分别是3,3,4。原创 2025-03-07 23:56:41 · 799 阅读 · 0 评论 -
Cuda编程之基于Cublas实现矩阵乘法运算Y=X@W.T(二)
cublas默认列优先读取数据,但是我们的目的基于行优先的数据进行计算和存储,如果目标公式是y=x@w-->cublas实际就是有y.T = w.T@x.T;如果目标公式是y=x@w.T;那么就要在cublas中将权重矩阵设定成需要进行转置CUBLAS_OP_T->cublas实际就是有y.T = w@x.T。#5.此次利用cublas实现了在不手动进行行列转置的情况下实现了y=x*w.T。##torch.nn.linear公式解读###1.基于Cublas实现y=x@w.T#原创 2025-03-07 23:03:36 · 409 阅读 · 0 评论 -
Cuda编程之基于Cublas实现矩阵乘法运算Y=X@W(一)
cublas默认列主序,那么我们如果预期Y=X*W;其实计算的是Y.T=X.T*W.T;geem运算结束之后,c++以默认行主序进行读取得到结果其实是Y=W*X;因此在cublasSgeem参数列表里面d_B处于d_A之前;实际运算方式为Y.T = W.T*X.T;此时c++再以行主序进行访存,得到的结果就是(Y.T).T = Y=X.W;C++默认以行主序进行存储和读取,但是cublas默认利用列主序进行读取和存储如果我们利用行主序的数据输入cublas最终得到的结果会与预期结果不符合。原创 2025-03-01 22:32:55 · 285 阅读 · 0 评论