CUDA学习(九十二)

简介:

统一的存储器编程:
统一内存简介:
Unified Memory是CUDA编程模型的一个组件,首次在CUDA 6.0中引入,该模型定义了一个托管内存空间,其中所有处理器都可以看到具有公共地址空间的单个一致内存映像。
(处理器是指具有专用MMU的任何独立执行单元。 这包括任何类型和架构的CPU和GPU。)
底层系统管理CUDA程序中的数据访问和位置,而不需要显式的内存拷贝调用。 这有利于两种主要方式的GPU编程:

  • GPU编程通过统一系统中所有GPU和CPU的内存空间并通过为CUDA程序员提供更紧密和更直接的语言集成而得到简化。
  • 通过将数据透明地迁移到使用它的处理器,可以最大限度地提高数据访问速度。

简而言之,统一内存不需要通过cudaMemcpy *()例程进行显式数据移动,而且不会因将所有数据放入零拷贝内存而导致性能损失。 数据移动当然仍然会发生,所以程序的运行时间通常不会减少; 统一内存改为可以编写更简单,更易维护的代码。
Unified Memory提供了一个“单指针到数据”模型,它在概念上类似于CUDA的零拷贝内存。 两者之间的一个关键区别在于,使用零拷贝分配时,内存的物理位置被固定在CPU系统内存中,使得程序可能对其进行快速访问或缓慢访问,具体取决于访问的位置。 另一方面,统一内存将内存和执行空间分开,以便所有数据访问都很快。
统一内存这个术语描述了一个系统,它提供内存管理服务给各种各样的程序,从定位运行时API到使用虚拟ISA(PTX)的程序。 该系统的一部分定义了选择统一内存服务的托管内存空间。
托管内存可与设备特定的分配互操作并互换,例如使用cudaMalloc()例程创建的分配。 所有在设备内存上有效的CUDA操作在托管内存上也是有效的; 主要区别在于程序的主机部分也能够引用和访问内存。
系统要求:
统一内存有两个基本要求:

  • SM体系结构3.0或更高版本的GPU(开普勒架构或更新)
  • 一个64位主机应用程序和非嵌入式操作系统(Linux,Windows,MacOS)

SM体系结构6.x或更高版本(Pascal或更新版本)的GPU可提供额外的统一内存功能,如本文档中概述的按需页面迁移和GPU内存超额认购。 请注意,目前这些功能仅在Linux操作系统上受支持。 运行在Windows上的应用程序(无论是TCC还是WDDM模式)还是macOS,都将使用基本统一内存模型,与6.x之前的体系结构一样,即使它们在计算能力为6.x或更高的硬件上运行。
timg

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
并行计算 计算机视觉 异构计算
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
190 0
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
|
缓存 并行计算 API
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(一)
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(一)
169 0
|
并行计算 异构计算
|
并行计算 异构计算 数据管理
|
并行计算 异构计算
|
并行计算 异构计算 存储
|
并行计算 API 异构计算