CUDA任意维度的矩阵相乘

__global__ void matrixMul( float* A, float* B, float* C, int hA,int wA, int wB)
{
int bx = blockIdx.x;
int by = blockIdx.y;
int tx = threadIdx.x;
int ty = threadIdx.y;


float Csub = 0.0f;



for (int j=0;j<wA;j+=BLOCK_DIM)
{
__shared__ float AS[BLOCK_DIM][BLOCK_DIM];
__shared__ float BS[BLOCK_DIM][BLOCK_DIM];


if(((by*BLOCK_DIM+ty)<hA)&&((tx+j)<wA))
{
AS[ty][tx] = A[(by*BLOCK_DIM+ty)*wA+tx+j];
}
else
{
AS[ty][tx] = 0;
}
if(((ty+j)<wA)&&((bx*BLOCK_DIM+tx)<wB))
{
BS[ty][tx] = B[(ty+j)*wB+bx*BLOCK_DIM+tx];
}
else
{
BS[ty][tx] = 0;
}


__syncthreads();


//Kahan's Summation Formula
for (int k = 0; k < BLOCK_DIM; ++k)
{
Csub += AS[ty][k]*BS[k][tx];
}


__syncthreads();
}

if(((by*BLOCK_DIM+ty)<hA)&&((bx*BLOCK_DIM+tx)<wB))
{
int c = wB*BLOCK_DIM*by + BLOCK_DIM*bx; 
C[c + wB * ty + tx] = Csub; 


}


}




//



int wA =  src.feat[t].size[2];;                       //1的宽 2的高
int wB = src.feat[t].size[0]*src.feat[t].size[1];  //2 3矩阵的宽
int hA = pmatrix.size[1];                  //1 3矩阵的高


dim3 mygrid(((wB+BLOCK_DIM-1)/BLOCK_DIM),(hA+BLOCK_DIM-1)/BLOCK_DIM);
dim3 myblock(BLOCK_DIM,BLOCK_DIM);
matrixMul<<<mygrid,myblock>>>(dev_matrix,dev_pyra[t],dev_pyrapro[t],hA,wA,wB);

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CUDA中,稀疏矩阵和稠密矩阵相乘是一个非常常见的操作。稀疏矩阵是指矩阵中大部分元素为零,而稠密矩阵则是指矩阵中大部分元素都非零。 在处理稀疏矩阵和稠密矩阵相乘时,通常需要进行以下几个步骤: 1. 稠密矩阵数据传输:将稠密矩阵数据从主机内存传输到GPU设备的全局内存中,以便后续在GPU上进行计算。 2. 稀疏矩阵数据结构转换:将稀疏矩阵由传统的行压缩存储(CSR)或列压缩存储(CSC)格式转换为适合在GPU上处理的稀疏格式,例如ELL格式(ELLPACK/ITPACK)或使用了线程合并和合并访问的CSR格式(CSR-TC)。 3. 稀疏矩阵和稠密矩阵相乘的计算:通过使用CUDA的并行计算特性,在GPU上进行稀疏矩阵和稠密矩阵的并发计算,以提高计算效率。在此过程中,我们通常会使用CUDA的线程、块和网格来处理数据并进行并行计算。 4. 结果数据传输:将计算得到的结果从GPU全局内存中传输回主机内存,以供后续的数据处理或输出。 需要注意的是,稀疏矩阵和稠密矩阵相乘的计算方法可能因具体情况而异,选择适合的算法和数据结构能够提高计算性能。此外,在实际应用中,还可以采用一些优化技术,如共享内存的使用、存储器访问模式的优化等,以进一步提高计算效率。 通过使用CUDA并行计算的能力,我们可以有效地进行稀疏矩阵和稠密矩阵的相乘操作,从而提高计算效率,并在处理大规模数据时节省时间和资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值