Unified Memory

首先讲一下Unified Memory(统一内存寻址)。在编写CUDA程序的时候,我们需要在CPU端和GPU端分别定义不同的内存空间,用于存储输入或输出的数据。简单来说,Unified Memory的概念就是定义一个内存指针,既可以从CPU端去访问,也可以从GPU端去访问。

Unified Memory经历了一个比较长的发展历史,2010年CUDA4率先推出了统一虚拟地址——UV的概念,当时NVIDIA叫做零复制内存,GPU代码可以通过PCIE总线访问固定的CPU内存,无需进行Memory Copy。

在CUDA6中推出了统一内存池的概念。内存池可以在CPU与GPU之间进行共享,而CPU和GPU均可以利用单一的指针来访问管理内存。但是,当时受限于Kepler和Maxwell架构,CPU涉及的所有管理内存必须是在Kernel函数启动之前先要与GPU同步,CPU和GPU是无法同时访问管理内存分配空间的,而且统一的地址空间也要受限于GPU物理内存的大小。

在Pascal架构之后,NVIDIA增加了大型地址空间的支持,可以支持49位的虚拟地址空间以及页错误,这是NVIDIA在Pascal架构下新增的两大特性。其中,页错误指的是GPU上代码所访问的页没有常驻GPU内存,这页就会出错,支持页错误可以让该页按需页迁移GPU内存或者映射到GPU地址空间,以便通过PCIE或者NVLink互联来进行访问,实现按需进行页迁移的操作。

新一代Volta架构是在Pascal的基础上新增加了Access Counters(存取计数器)功能,它可以使得页迁移控制更加精细、合理。

Pascal架构下的页迁移就如前一张图片所示。它会根据GPU或者CPU上被访问地址所在页的位置,比如logo的访问或者remote的访问,按需发起页迁移操作,这时候CPU或者GPU访问统一内存不是直接访问方式,而是通过页迁移来实现的。

在Volta架构下面,NVIDIA新增了Access Counters的存取计数器这一特性。这个特性会对内存访问的频繁程度进行计数,只会对访问频繁的内存进行迁移,从而进一步提升内存访问的效率。另外,基于NVLink连接的统一内存管理,它支持对CPU与GPU的内存进行直接访问和cache(高速缓冲存储器),但是目前支持这项功能的CPU实际上指的就是IBM的Power。同时,它支持CPU与GPU之间的原子操作,以及地址转换服务(ATS)功能,可以实现GPU访问CPU的分页表,为GPU提供了对CPU内存的完整访问权限。

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

浅谈TCP优化

很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱。Ilya Grigorik 在「High Performanc...

5205
来自专栏安富莱嵌入式技术分享

【安富莱原创开源应用第3期】花式玩转网络摄像头之VNC远程桌面版本,稳定运行2年不死机

1、前段时间开源了一个网络摄像头的TCP版本 https://www.cnblogs.com/armfly/p/9173167.html,这次再来一个远程VNC...

1172
来自专栏人工智能头条

深度学习指南:基于Ubuntu从头开始搭建环境

1704
来自专栏企鹅号快讯

AI入门工具篇-Tensorflow安装

还记得去年大火大热的AlphaGo吗?从2015年开始,AlphaGo这名“网络棋手”先后挑战了欧洲围棋冠军、世界围棋冠军,几战成名后,吸引了大量的关注。而它背...

3518
来自专栏张善友的专栏

MVC结构简介

本文编译自J2EE的相关文档。 MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分...

1825
来自专栏Spark学习技巧

如何理解Linux中的load averages?

经常和 Linux 打交道的童鞋都知道,load averages 是衡量机器负载的关键指标,但是这个指标是怎样定义出来的呢?

882
来自专栏机器学习算法工程师

TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

作者:刘才权 编辑:田 旭 安装平台 1 平台 目前TensorFlow已支持Mac、Ubuntu和Windows三个主流平台(64位平台), ? 2 GPU...

3886
来自专栏Small Code

Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms)解决办法

由于我很早就在 GitHub 下载了 TensorFlow 的源码库没有更新,在运行 TensorFlow 官方的 CNN 例子的时候,总是报 ImportEr...

4269
来自专栏蜉蝣禅修之道

Python之easy_install安装出错

1753
来自专栏FreeBuf

藏匿在邮件里的“坏小子”

不知从什么时候开始,我的垃圾邮件开始暴增,而且主题千奇百怪,有“再也不用去澳门赌博”、“免保人、免抵押”…等推广主题;有“南北方压岁钱差距有多大?”、“爱过才知...

1488

扫码关注云+社区