【NVIDIA CUDA】2023 CUDA夏令营编程模型(二)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。

在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

博客内容主要围绕:

5G/6G协议讲解

算力网络讲解(云计算,边缘计算,端计算)

高级C语言讲解

Rust语言讲解

文章目录

CUDA编程模型------共享内存

一、多种CUDA存储单元介绍

内存访问速度(由快到慢):

  • Register file
  • Shared Memory
  • Constant Memory
  • Texture Memory
  • Local Memory and Global Memory:位于Device memory中,空间最大,latency最大,是GPU最基础的内存;

1.1 共享内容介绍

实际驻留在GPU芯片上的内存只有两种类型:寄存器和共享内存。所以,Shared Memory是目前最快的可以让多个线程通信的地方。那么,就有可能会出现同时有很多线程访问Shared Memory上的数据。为了克服这个同时访问的瓶颈,Shared Memory被分成32个逻辑块,称为bank。

  • Shared Memory可以被设置成16KB,32KB ,48KB...剩下的给L1缓存;
  • 带宽可以使32bit 或者 64 bit;
  • 可以被多线程同时访问,因此存储器被划分为 banks;
  • 连续的 32-bit 访存被分配到连续的 banks;
  • 每个 bank 每个周期可以响应一个地址;
  • 如果有多个bank的话可以同时响应更多地址申请;

1.2 配方式

静态分配:

  • shared int s[64];
    动态分配:
  • dynamicKernel<<<1, n, n*sizeof(int)>>>(d_d, n);
    extern shared int s[];

1.3 bank竞争

  1. 同常量内存一样,当一个 warp 中的所有线程访问同一地址的共享内存时,会触发一个广播(broadcast)机制到
    warp 中所有线程,这是最高效的;
  2. 如果同一个 half-warp/warp 中的线程访问同一个 bank中的不同地址时将发生 bank conflict;
  3. 每个 bank 除了能广播(broadca st)还可以多播(mutilcast)(计算能力 >= 2.0),也就是说,如果一个 warp 中的多个线程访问同一个 bank 的同一个地址时(其他线程也没有访问同一个bank 的不同地址)不会发生 bank
    conflict;
  4. 即使同一个 warp 中的线程随机的访问不同的 bank,只要没有访问同一个 bank 的不同地址就不会发生 bank conflict;

如果没有bank冲突的话,Shared memory 跟 registers 一样快:

  • 快速情况:
    • warp 内所有线程访问 不同 banks, 没有冲突
    • warp 内所有线程读取同一地址,没有冲突(广播)
  • 慢速情况:
    • Bank Conflict: warp 内多个线程访问同一个bank
    • 访存必须串行化

1.4 如何避免冲突

先看一个有bank冲突的例子:


一个warp中的线程会访问,同一列中的数据,产生了bank冲突。

解决方法:

  • memory padding方法

    使用了上面的内存padding方法之后,访问顺序编程了右图所示的"斜线"的顺序,代码如下:

1.5 共享内存优化


相关推荐
fhqlongteng4 小时前
RK3576上electron调用GPU的功能设置方法
前端·javascript·electron·gpu·rk3576
AI小小怪1 天前
保姆级教程:Ubuntu 22.04 安装 NVIDIA GPU 驱动 + CUDA 12.6(RTX 3080 显卡)
linux·nvidia·cuda
feasibility.2 天前
nvidia-smi 失灵,显存凭空消失?—— NVML 驱动版本错配的记录
linux·运维·服务器·经验分享·nvidia·驱动
Dfreedom.3 天前
算子融合:从硬件本质到性能飞跃的深度学习优化艺术
人工智能·深度学习·gpu·gpu加速·模型加速·算子融合·模型计算
佳杰云星4 天前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心
视***间4 天前
端侧大模型落地新标杆:视程空间将GPT-OSS边缘AI深度导入NVIDIA Jetson平台
人工智能·gpt·边缘计算·nvidia·ai算力·gpt-oss·视程空间
wj3055853784 天前
课程 1:WSL + uv + ComfyUI 环境选择说明
python·wsl·cuda·uv·comfyui
扫地的小何尚4 天前
掌握 Agentic AI 技术:AI Agent 定制方法全景与实践路径
大数据·人工智能·算法·ai·llm·agent·nvidia
Elastic 中国社区官方博客5 天前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia
archi-dreamer5 天前
AMDGPU 后端 ABI 总览
gpu·llvm·编译器与工具链