前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【参加CUDA线上训练营】--储存单元及矩阵乘法

【参加CUDA线上训练营】--储存单元及矩阵乘法

作者头像
云帆沧海
发布2024-01-17 17:19:50
1020
发布2024-01-17 17:19:50
举报
文章被收录于专栏:编程杂记编程杂记

1. GPU的存储单元

GPU的存储单元分为两大类: 板子上芯片周围的显存颗粒(on board),读取速度相对慢,如下图中的local memory,global memory,constant memory,texture memory。 在GPU芯片内部(on chip),读取速度相对快,如下图中 下图中的箭头双向表示可以读写,单向表示只能读。这些memory可以进一步细分: R/W可读可写memory: registers、local memory:线程私有memory,每个线程私有访问。 shared memory:一个block内的线程都可以访问,可以数据共享通信。 global memory:每个线程都可以读写。 R 只读memory:constant memory,texture memory是每个线程都可以读。 global memory,constant memory,texture memory和主机之间都可以通信读写,通常显卡说明书写的显存大小,就是global memory

在这里插入图片描述
在这里插入图片描述

2. GPU存储单元的分配与释放

1.申请GPU存储单元 当我们要为一个方阵M(m * m)申请GPU的存储单元时,使用下面的函数: cudaMalloc((void**) &d_m,sizeof(int) * m * m),参数含义如下: 1)d_m:指向存储在Device端数据的地址的指针 2)sizeof(int) * m * m:存储在Device端空间的大小

2.释放GPU申请的存储单元函数 cudaFree(d_m); d_m:指向存储在Device端数据的地址的指针,从CPU内存传输到GPU存储单元 cudaMemcpy(d_m,h_m,sizeof(int)* m * m,cudaMemcpyHostToDevice),各参数的设置为: d_m:传输的目的地,GPU存储单元 h_m:数据的源地址,CPU存储单元 sizeof(int)* m * m:数据传输的大小 cudaMemcpyHostToDevice:数据传输的方向,CPU到GPU

在这里插入图片描述
在这里插入图片描述

2.矩阵乘法

CPU处理

代码语言:javascript
复制
void cpu_matrix_mult(int *h_a, int *h_b, int *h_result, int m, int n, int k) 
{
    for (int i = 0; i < m; ++i) 
    {
        for (int j = 0; j < k; ++j) 
        {
            int tmp = 0;
            for (int h = 0; h < n; ++h) 
            {
                tmp += h_a[i * n + h] * h_b[h * k + j];
            }
            h_result[i * k + j] = tmp;
        }
    }
}

GPU算法分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法实现:

代码语言:javascript
复制
__global__ void gpu_matrix_mult(int *a,int *b, int *c, int m, int n, int k)
{ 
    int row = blockIdx.y * blockDim.y + threadIdx.y; 
    int col = blockIdx.x * blockDim.x + threadIdx.x;
    int sum = 0;
    if( col < k && row < m) 
    {
        for(int i = 0; i < n; i++) 
        {
            sum += a[row * n + i] * b[i * k + col];
        }
        c[row * k + col] = sum;
    }
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. GPU的存储单元
  • 2. GPU存储单元的分配与释放
  • 2.矩阵乘法
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档