CUDA简介——CUDA内存模式

news2025/2/24 2:56:30

1. 引言

前序博客:

  • CUDA简介——基本概念
  • CUDA简介——编程模式
  • CUDA简介——For循环并行化
  • CUDA简介——Grid和Block内Thread索引

在这里插入图片描述

CUDA内存模式,采用分层设计,是CUDA程序与正常C程序的最大不同之处:

  • Thread-Memory Correspondence
  • Block-Memory Correspondence
  • Grid-Memory Correspondence

总体的CUDA内存模式为:
在这里插入图片描述

  • 1)Registers & Local Memory:声明在Kernel内的常规变量。小空间变量存储于Register中,大空间变量存储于Local Memory中。因Local Memory操作速度慢,应尽量避免使用Local Memory。
  • 2)Shared Memory:允许同一Block内的Threads间相互通信。
  • 3)Constant Memory:用于存储Kernel执行期间不变的数据。会缓存到On-Chip memory中,可大大降低Kernel执行期间Global Memory的通信吞吐量。
  • 4)Global Memory:用于存储与Host交互的数据。

2. Thread-Memory Correspondence

在这里插入图片描述

Thread-Memory Correspondence,即Threads等价为Local Memory (and Registers):

  • 其范围为:对相应Thread是private的,对其它Threads来说是不可访问的。
  • 其生命周期为:Thread。当Thread执行完成,与该Thread相关的任何local memory (and Registers) 都将自动释放。
  • 不过,local memory和registers存在完全不同的性能特性。

3. Block-Memory Correspondence

在这里插入图片描述
Block-Memory Correspondence,即Blocks等价为Shared Memory:

  • 其范围为:同一Block内的每个Thread均可访问。
  • 其生命周期为:Block。当Block执行完成,其shared memory内容都将自动释放。

4. Grid-Memory Correspondence

在这里插入图片描述
Grid-Memory Correspondence,即Grids等价为Global Memory:

  • 其范围为:所有 Grids内的每个Thread均可访问。
  • 其生命周期为:Host代码内的整个main()程序。或可通过在Host代码中手工调用cudaFree(...)来释放。

5. Device内存模式

在这里插入图片描述

  • Host:由CPU及机器内存等组成。
  • Device:由GPU及其DRAM等组成。【Device图上的绿色方格,表示的是一个CUDA core。】

在这里插入图片描述

Device的DRAM中,有:

  • Global Memory物理空间
  • Local Memory物理空间。需注意,此处的Local,并不是指其物理位置;此处的Local是指该内存空间的scope(范围)和 lifetime(生命周期)。

而Device的GPU中,有:

  • Registers物理空间
  • Shared Memory物理空间

Device图上的绿色方格,表示的是一个CUDA core。Device上的CUDA cores组合在一起,成为streaming Multiprocessor(简称为SM)。
Device图上的黄色方格,表示SM。黄色方格组合在一起为CUDA cores集合。

位于SM上的内存,称为:

  • “On-Chip” Device memory。因此,Registers和Shared Memory均对应为 “On-Chip” Device memory。因Registers和Shared Memory均物理存在与GPU的streaming Multiprocessor中。

非SM上的内存,称为::

  • “Off-Chip” Device memory。因其并不存在与GPU之上。对应,Global Memory和Local Memory均为“Off-Chip” Device memory。也即Device上的DRAM为 “Off-Chip” Device memory。

以NVIDIA GPU Geforce Titan 物理布局为例:
在这里插入图片描述

  • 上图蓝色框所示,为Device的DRAM,均为 “Off-Chip” Device memory。
  • 上图绿色框,即为实际的GPU,对应为“On-Chip” Device memory。

理解Blocks如何映射到SM,是设计kernel的基本要求,从而获得优化的GPU计算性能。

5.1 内存速度

不同的内存空间,其带宽和延迟各不相同:
在这里插入图片描述

  • on-chip memory操作速度,要快于off-chip memory。

5.2 Global Memory访问

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

Global Memory访问方式有:

  • cudaMalloc()
  • cudaMemset()
  • cudaMemCopy()
  • cudaFree()

无法避免不使用Global Memory,因必须使用Global Memory空间,来将数据由host传递到device。不过,应尽量减少Global Memory通讯量,因为其速度很慢。

Global Memory的优势在于:

  • 其通常很大。如计算机内存为8GB或16GB,而Titan和Tesla k40,均有6GB的global DRAM。

5.3 Registers and Local Memory

在这里插入图片描述
Kernel中声明的变量,存储于Register中:

  • 对应为On-Chip Device memory。
  • 为最快的内存形式。

太大不适于Register的数组,将存储在Local Memory中:

  • 对应为Off-Chip Device memory。
  • 由编译器控制。
  • “Local”是指范围,而不是位置。此处“Local”,是指相对每个Thread的Local Memory。
    • 每个Thread均有其自己的private local memory和registers,对其它Thread不可访问。
  • 应尽量避免,因Local Memory为最慢的内存形式之一。Registers为最快的内存形式。
    • 因此,设计目标为避免将更多信息存储于local变量中,以免超过register的存储空间。
    • register space为稀缺硬件资源。应更好地规划充分利用。

5.4 Shared Memory

在这里插入图片描述
借助Shared Memory:

  • 支持同一Block内的Threads之间相互通信:
    • 同步方式通信
  • Shared Memory为非常特殊的内存,对实现计算性能和正确性至关重要:
    • Shared Memory处理速度快,仅次于Registers。因其为On-Chip device memory。
    • 支持Block内的Threads相互通信,可将其看成是用户定义的L1 Cache,可用作“scratch-pad(高速暂存存储器)”内存。后续将介绍Shared Memory和L1 Cache关系密切。

在这里插入图片描述

使用__shared___关键字来表示分配的为shared memory:
在这里插入图片描述

5.5 Constant Memory

Constant Memory为Device Memory的特殊区域:

  • 用于存储Kernel执行过程中不变的数据。
  • 对Kernel来说是只读的。
  • Constant Memory为Off-Chip Device Memory。
  • Constant Memory 积极缓存到 On-Chip Memory中。

在这里插入图片描述
Constant Memory的思想在于:

  • GPU没有很大的cache。从而可使用constant memory来实现很简单的cache类型。
  • Constant Memory可以很大,因其实际位于Device DRAM中。所有Threads均可访问Constant Memory,但其为只读内存。
  • 对于需频繁访问,但Kernel执行过程中不变的数据,可使用Constant Memory。
  • Constant Memory是在off-chain DRAM硬件中实现的,但实际其内容会积极缓存到On-Chip Memory中。因此,使用Constant Memory,可大大降低Kernel执行期间Global Memory的通信吞吐量。

参考资料

[1] Intro to CUDA (part 5): Memory Model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux信息收集

Linux信息收集 本机基本信息 #管理员 $普通用户 之前表示登录的用户名称,之后表示主机名,再之后表示当前所在目录 / 表示根目录 ~表示当前用户家目录1、内核,操作系统和设备信息 uname -a 打印所有可用的系统信息 uname -r 内核版本 u…

每日一题 2477. 到达首都的最少油耗(中等,树)

去参加CCF软件大会,好多天没做每日一题了 我的思路: 看到题目是一个由叶子节点向根节点汇聚的过程,就想到拓扑排序每次移动都只将叶子节点向前移动一格,并删除它,此时移动的目标节点数量加一,并根据该叶子…

vue创建项目,使用可视化界面安装插件

安装项目: vue create vue-app 选择默认配置就行,也可以按需选择自定义配置 vue ui通过可视化管理项目 通过可视化安装全家桶插件

文件重命名:删除文件名中的空格,提高文件可读性和可管理性的方法

在计算机科学中,有效的文件管理对于提高工作效率和保持数据的一致性至关重要。工作中经常会遇到文件名中包含空格的情况,这不仅会使文件在某些情况下难以读取,而且可能导致管理上的困扰。在文件名中添加空格可能会使文件名变得模糊和不明确&a…

批量创建/更新外协工序采购信息记录

批量创建/更新没有物料号的外协工序采购信息记录。 执行事务代码ZME1X_OP,下载模板。(此程序可同时用于外协工序的创建和修改)创建外协工序的时候如果是新建则不需要输入采购信息记录号,如果是要更新外协工序价格,则必须输入采购信息记录号。价格单位默认为‘1’,货币代码…

Flannel源码解析

Flannel源码解析 项目地址: https://github.com/flannel-io/flannel 更多文章访问 https://www.cyisme.top flannel中有三种工作模式: udp。 性能最低,利用tun/tap设备,通过udp封装ip包。中间需要经过多次内核态和用户态的切换。vxlan。 性能中等&…

JavaWeb(六)

一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包,在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…

【希尔排序和直接插入排序】

文章目录 一. 直接插入排序代码实现:过程思想:性能分析: 希尔排序基本思想:代码实现:特性总结:希尔排序由于gap的取值有很多方法和组,导致没有一定规律去计算,因此目前为止众多大佬通过大量实验证明例如,Kn…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言,天然存在跨平台的属性,我们在编译完成后,可以再不暴露源代码的情况下,运行在对应的平台中,但是 还是架不住有逆向工程师的反编译、反汇编的情形;(当然我们写的都不希望被别人偷了…

如何在应用程序中实现在线更新功能

大家好,我是咕噜-凯撒。随着技术的不断发展和应用程序的普及,保持应用的最新版本成为开发者们必须面对的挑战之一。在线更新功能的引入可以帮助开发者简化用户体验,用户始终使用的都是最新版本的应用。下面简单的介绍一下如何在应用程序中实现…

【JavaEE进阶】 Spring核⼼与设计思想

文章目录 🌲Spring 是什么?🎄什么是IoC呢?🎈传统程序开发🎈传统程序开发的缺陷🎈如何解决传统程序的缺陷?🎈控制反转式程序开发🎈对⽐总结规律 🍀…

想考研到电子类,未来从事芯片设计,目前该怎么准备?

最近看不少天坑学子想考研微电子专业,但却不知道该怎么准备?接下来就带大家一起来具体了解一下~ 首先是目标院校的选择? 目前所设的微电子专业学校里,比较厉害的有北京大学、清华大学、中国科学院大学、复旦大学、上海交通大学、…

关系型数据库的数据隔离级别Read Committed与Repeatable Read

一、背景 数据库隔离级别会影响到我们的查询,本文试图以生产中的示例,给你一个直观的认识。 所谓,理论要结合实践,才能让我们理解得更加透彻。 另外,隔离级别的知识面很大,本文也不可能俱全,…

大数据SpringBoot项目|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现

大数据SpringBoot项目|基于SpringBootMyBatis框架健身房管理系统的设计与实现 摘 要:本文基于Spring Boot和MyBatis框架,设计并实现了一款综合功能强大的健身房管理系统。该系统涵盖了会员卡查询、会员管理、员工管理、器材管理以及课程管理等核心功能,…

理解js中原型链的封装继承多态

前言 面向对象有三大特性:封装继承多态。 不过,js和java的封装继承多态是不一样的,我和从事java开发的朋友有过一次对话(抬杠 !--)。 我说:javascript也是面向对象语言, 他说:不对吧,js不是面向对象吧。 我说:是的,官方说的就是面向对象语言。 他说:那你知道三大特性吗?…

彼此的远方

那天两个人互相表白了心意,在那天那刻确定了彼此相爱,没有鲜花,没有礼物。 男孩的世界曾陷入黑暗,冷清而又孤寂,女孩带着光和热来了,后来,女孩成为了男孩的太阳。女孩以为男孩是远方的风…

SpringBoot 注入RedisTemplat 启动报错

需求 因为需要限制部门内多个人员同一时间操作同一批客户的需求,考虑下决定用Redis滑动窗口实现自过期以及并发校验。 问题 新建了个Redis工具类封装RedisTemplat 操作,到启动时却发现无法正常启动,报错注入错误。 The injection point has…

数字化转型:互联网+为企业带来的全新机遇

引言 在当今快速发展的商业环境中,数字化转型和互联网已成为企业前进的关键动力和重要战略。数字化转型代表了企业在数字技术的推动下,对其运营模式、业务流程以及客户体验的全面变革和升级。而“互联网”则突显了数字化时代与传统产业的融合&#xff0…

RAR文件的密码保护如何设置和取消?

RAR文件是压缩包一种常用的压缩文件格式,对于这种文件,我们如何设置和取消密码保护呢? 首先我们要下载适用于RAR文件的WinRAR解压缩软件,然后在压缩文件的时候,就可以同步设置密码,选中需要压缩的文件&…

navicat premium 历史版本下载地址

navicat贴心地给大家准备了一致的下载地址: 只是没有把旧版本的链接放出来而已。 链接的格式 : 前缀版本类型语言位数 前缀:http:/download.navicat.com/download/navicat 版本:三位数,前两位是大版本,后…