GPU Microarch 学习笔记【2】Unified Memory

news2024/11/20 1:52:01

目录

1. M3 Dynamic Caching

2. Unified Memory

3. Unified Memory是如何处理page fault的

4. Unified Memory Page Fault的相关论文

M3 Dynamic Caching


最新的Apple M3 芯片最亮眼的可能是支持dynamic caching,如下图所示。

具体说来就是传统的GPU分配内存时,不是实时的分配内存,而是在一开始就分配好固定大小的内存,这时分配的内存是按照任务需要内存上限分配的,M3新支持的dynamic caching,可以支持GPU实时的分配内存,提高了内存的利用率,因为内存的使用就像上面的图片,有波峰和波谷。

但是这个应该是叫做dynamic allocation of memory,为什么叫做caching,个人理解可能是因为内存的分配也可以看作是caching,不过是按照page的颗粒度,将需要的页缓存在memory中,内存满时,也要将选作eviction的脏页写回disk,类似于脏的数据块64B写到下一级,不同的是此时颗粒度是4KB。

Apple M3介绍自己是业界首创,但是看着这更像是一个早就该有的基本功能,于是去看看Nvidia有没有类似的技术。

Unified Memory


传统的cuda教学课教的是在CPU malloc内存分配数据块,在GPU cudaMalloc数据块,然后将数据块从CPU内存拷贝到GPU内存,启动kernel的计算,这样的程序写起来比较复杂,更像是操作外设。

Nvidia在CUDA中引入了Unified Memory,将CPU内存和GPU内存视为一个大内存:

  • CUDA4引入了Unified Virtual Addressing可以访问一个pinned在CPU内存中的memory

  • CUDA6 引入了Unified Memory, CPU和GPU可以同时访问整个内存,但是不能同时访问一页内存,并且Unified Memory仅限于GPU memory的大小

  • CUDA8 增加了虚拟寻址的范围到49bit,并且支持了page fault。通过page fault,GPU可以实现像CPU一样的按需分配。

这样理想的情况下,CUDA的编写不再需要手动的在CPU和GPU侧分配内存,拷贝内存,kernel执行完毕后再拷贝回来,而是可以直接共享memory的指针。此外这个也可以减少CUDA对指针,链表,树,图这种需要深拷贝的内存的编程复杂度。

我们介绍最新的基于按需分配demand paging的unified memory,这个概念很像M3说的dynamic caching。

Unified Memory是如何处理page fault的


这里的demand paging的概念和CPU的相同,就是访问页时,发生page fault,然后获取page,也被称为memory oversubscription,但是与CPU不同,因为GPU没有处理precise exception的能力,也没有处理page fault的能力。当一个warp的遇到page fault时,GPU可以:

  • 暂停所有warp的执行

  • 或者暂停当前warp的执行,调度其他可以执行的warp

显然第一种代价更大,因此GPU按照第二种执行,内部也就需要存放一个page fault queue。而后具体的处理page fault,搬运page的操作,超出了GPU的能力范围,需要CPU执行或者CPU发送命令到GPU执行。

具体的流程:

  • GPU内部单元向TLB发起虚实地址转换请求,TLB miss,而后在GPU MMU page walk,查询页表,依然miss后,触发page fault。

  • GPU MMU向内部单元发送该地址翻译失败响应,挂起该warp。

  • GPU将page fault存到page fault queue中,向CPU发起page fault异常请求。

  • CPU执行GPU runtime程序从page fault queue中读取page fault的请求,不同于CPU处理CPU page fault的直接处理方式,GPU可能会同时发生多个page fault,于是:

    • 对page fault queue中的地址进行排序sort

    •  Sort之后,方便在CPU的页表中进行查找

  • 不同于CPU处理CPU page fault的另一点是,不仅会处理GPU的page fault对应的页,也会进行prefetch其他的页,预取一些页进入GPU内存,提高page fault的利用效率

  • 而后根据该page的属性,CPU需要unmap这个page,将该页放到GPU的内存中,同时在GPU的页表中增加这个page,并flush 这个GPU uTLB

  • 完成上述操作后,GPU才可以重新将page fault的warp重新调度

上述操作如下图左侧所示:

图源自[4]

这个过程十分繁琐,如果此时GPU的内存已满,还需要将GPU中的一页evict到CPU中,如上图右侧所示。

为了保证页表的顺序更新,evict旧页操作和fetch新页的操作还需要顺序执行,如下图所示,需要PageX被eviction之后,pageA才能allocation。

Unified Memory 处理Page Fault相关论文


最开始提出这个unified memory的论文[1],做出的贡献是

  • 每次page fault不是只处理一个页,而是将page fault放入queue中

  • 每次处理多个page fault时,因为时间比较长,因此可以同时增加prefetch,提高性能,他提供了sequential prefetch和random prefetch

后来的论文[2]发现GPU处理evict和fetch的操作是顺序的,以保证正确性,因此他们提出可以在中断处理时,先evict一个页,因为GPU内存向CPU内存写,比读要快,因此evict和fetch操作可以并行执行。

同时该论文还提出了我们还可以增加thread oversubscription,这样当所有的thread都page fault时,可以调度其他的thread block进入,类似于CPU的context switch。

Nvidia的GPU的prefetcher提供一种Tree Based Prefetcher,但是evict时使用的是LRU策略,有的论文[3]为了改进,也增加了tree based eviction的策略。

[1] Towards High Performance Paged Memory for GPUs
[2] Batch-Aware Unified Memory Management in GPUs for Irregular Workloads
[3] Interplay between Hardware Prefetcher and Page Eviction Policy in CPU-GPU Unified Virtual Memory
[4]https://developer-blogs.nvidia.com/wp-content/uploads/2021/09/Page-fault-service-data-eviction.png

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

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

相关文章

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(1)实现带同步复位功能、采用上升沿触发的D触发器

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.顶层模块的书写 二.两种验证方法 2.1使用…

美国BGP服务器有哪些优势?

​  在当今数字化时代,网络连接的性能和可靠性对于企业和个人来说至关重要。而美国作为全球互联网的中心之一,其地区BGP服务器拥有许多优势。  网络性能和可靠性:美国BGP专线服务器采用BGP协议,一种高级动态路由协议&#xff…

线性表->栈

文章目录 前言概述栈的初始化销毁压栈出栈判断栈为不为空栈的有效个数 前言 栈相对于链表,稍微简单一点,但是栈的难点在于通过栈去理解递归算法。 概述 **栈:**一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。…

FreeRTOS知识梳理

一、RTOS:Real time operating system,中文意思为 实时操作系统,它是一类操作系统,比如uc/OS、FreeRTOS、RTX、RT-Thread 这些都是实时操作系统。 二、移植FreeRTOS到STM32F103C8T6上 interface选择CMSIS_V1,RCC选择Crystal Ceramic Resonator 。 …

【2012年数据结构真题】

41题 (1) 最坏情况下比较的总次数 对于长度分别为 m,n 的两个有序表的合并过程,最坏情况下需要一直比较到两个表的表尾元素,比较次数为 mn-1 次。已知需要 5 次两两合并,故设总比较次数为 X-5, X 就是以 N…

Django(四、路由层)

文章目录 一、路由层1.路由匹配url方法第一个是参数 的正则表达式 二、正则无名分组与有名分组无名分组有名分组 三、反向解析1.概念无名分组动态路由解析有名分组动态路由解析 四、路由分发为什么要用路由分发? 1.总路由分发配置名称空间 五、伪静态的概念六、虚拟…

【STM32 CAN】STM32G47x 单片机FDCAN作为普通CAN外设使用教程

STM32G47x 单片机FDCAN作为普通CAN外设使用教程 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽…

基于SSM+Vue的网上购物商城

基于SSMVue的网上购物商城的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 商品详情 登录界面 管理员界面 用户界面 可视化图标 摘要 基于SSM&#xff0…

vcomp120.dll丢失怎么办?vcomp120.dll丢失的解决方法分享

vcomp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来困扰。那么,当我们遇到这个问题时,应该如何修复呢?下面我将为大家介绍四个修复vcomp120.dll丢失的方法。 一、使用dll修复程序修复 可以通过百度或许…

Knife4j在springboot3中如何集成呢(如果大家阅读能力好的话,建议直接看作者写的博客。当然,在下面也会附上作者的博客)

一.为什么会写这篇博客呢? 因为本作者在使用springboot2的时候还好好的,将springbooot2升到springboot3的时候,发现我天,knife4j好像出问题了,找了好久才发现时knife4j的版本问题。 二.说一下knife4j的版本问题吧&…

力扣刷题-二叉树-二叉树的层序遍历(相关题目总结)

思路 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的…

力扣刷题-二叉树-翻转二叉树

226.翻转二叉树 翻转一棵二叉树。 思路 参考: https://www.programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E6%80%9D%E8%B7%AF 如果要从整个树来看,翻转还真的挺复杂,整个树以中间分割线进行翻转&#xf…

【CUDA编程--编程模型简介算子开发流程】

官方文档:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 什么是CUDA CUDA全称(Compute Unified Device Architecture)统一计算架构,是NVIDIA推出的并行计算平台深度学习加速:对于神经网络&…

超级干货:光纤知识总结最全的文章

你们好,我的网工朋友。 光纤已经是远距离有线信号传输的主要手段,而安装、维护光纤也是很多人网络布线的基本功。 在网络布线中,通常室外楼宇间幢与幢之间使用的是光缆,室内楼宇内部大都使用的是以太网双绞线,也有使用…

前端案例-css实现ul中对li进行换行

场景描述: 我想要实现,在展示的item个数少于4个的时候,则排成一行,并且均分(比如说有3个,则每个的宽度为33.3%),如果item 个数大于4,则进行换行。 效果如下&#xff1a…

冰点还原精灵_Deep Freeze Standard v8.60.020.5592中文版

eep Freeze(又被成为冰点还原精灵)是Faronics公司出品的一款简单易用的系统还原软件,使用能够帮助用户轻松将系统还原到安装该款软件之后状态,避免因为病毒的入侵以及人为的对系统无意或无意的破坏,让你的系统始终完美…

HTTP——

HTTP 请求报文的构成 如下图: 第一行:HTTP请求的方法,具体是POST方法还是GET方法,或是其它方法;URI就是你的HTTP请求的路径;后面是HTTP协议的版本; 第二行往下连续多行:这些是请求头部分,也就是请求的首部设置的一些信息,相当于对HTTP请求的一些设置; 空格行:在…

【PIE-Engine 数据资源】全球250米LAI产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球250米LAI产品时间范围2015年空间范围全球数据来源北京师范大学肖志强教授团队代码片段var images pie.ImageCollection(“BNU/LAI/GLOBAL-250”) 二、描述 全球 250 米叶面指数产品由北京师范…

VS Code设置技巧

基础设置 中文界面 安装扩展:Chinese(Simplified) Language Pack 自动换行 文件 - 首选项 - 设置,搜索wrap,找到Editor: Word Wrap,将其更改为on。