CUDA 12.4文档3 内存层次异构变成计算能力

2024-04-12 00:44

本文主要是介绍CUDA 12.4文档3 内存层次异构变成计算能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

5.3 内存层次 Memory Hierarchy

CUDA线程在执行过程中可能会访问多个内存空间的数据,如图6所示。每个线程都有自己的私有本地内存。

每个线程块都有一个对块内所有线程可见的共享内存,并且其生命周期与块相同。线程块集群中的线程块可以对彼此的共享内存执行读、写和原子操作。所有线程都可以访问同一块全局内存。

此外,还有两个只读内存空间可以被所有线程访问:常量内存空间和纹理内存空间。全局内存、常量内存和纹理内存空间都针对不同的内存使用进行了优化(参见设备内存访问章节)。纹理内存也提供了不同的寻址模式,以及针对某些特定数据格式的数据过滤(参见纹理和表面内存章节)。

全局内存(global)、常量内存(constant)和纹理内存(texture)空间在相同应用程序的内核启动间都是持久的。

在这里插入图片描述

图6:内存层次

5.4 异构编程

如图7所示,CUDA编程模型假设CUDA线程在一个物理独立的设备上运行,该设备作为运行C++程序的主机的协处理器。例如,当内核在GPU上运行,而C++程序的其余部分在CPU上运行时,就是这种情况。

CUDA编程模型还假设主机和设备在DRAM中分别维护自己的独立内存空间,分别称为主机内存和设备内存。因此,一个程序通过调用CUDA运行时(在编程接口章节中描述)来管理内核可以看到的全局内存、常量内存和纹理内存空间。这包括设备内存的分配和释放,以及主机和设备内存之间的数据传输。

统一内存提供了管理内存,以连接主机和设备的内存空间。管理内存可以作为一个统一、连贯的内存映像,通过一个共享的地址空间,从系统中的所有CPU和GPU访问。这一能力使设备内存能被过度订阅,并且可以大大简化转换应用程序的任务,因为它消除了在主机和设备之间明确镜像数据的需要。请参阅统一内存编程章节来了解统一内存的介绍。
在这里插入图片描述

图7:异构编程

串行代码在主机上执行,而并行代码在设备上执行

5.5 异步SIMT编程模型

在CUDA编程模型中,线程是执行计算或内存操作的最低级别的抽象。从基于NVIDIA Ampere GPU架构的设备开始,CUDA编程模型通过异步编程模型为内存操作提供加速。异步编程模型定义了异步操作相对于CUDA线程的行为。

异步编程模型定义了异步屏障的行为,用于CUDA线程之间的同步。该模型还解释和定义了如何使用cuda::memcpy_async在GPU进行计算的同时异步地从全局内存移动数据。

5.5.1 异步操作

异步操作被定义为由CUDA线程启动并由另一个线程异步执行的操作。在一个规范的程序中,一个或多个CUDA线程与异步操作同步。启动异步操作的CUDA线程并不需要在同步线程中。

这样的异步线程(即作为线程)总是与启动异步操作的CUDA线程关联。异步操作使用同步对象来同步操作的完成。这样的同步对象可以由用户显式管理(例如,cuda::memcpy_async),也可以在库中隐式管理(例如,cooperative_groups::memcpy_async)。

同步对象可以是cuda::barriercuda::pipeline。这些对象在“异步屏障章节”和“使用cuda::pipeline进行异步数据复制章节”中有详细的解释。这些同步对象可以在不同的线程范围内使用。范围定义了可能使用同步对象与异步操作同步的线程集。下表定义了CUDA C++中可用的线程范围,以及可以与每个范围同步的线程。

Thread ScopeDescription
cuda::thread_scope::thread_scope_thread只有发起异步操作的CUDA线程才会同步。
cuda::thread_scope::thread_scope_block与初始化线程相同的线程块中的所有或任何CUDA线程都会同步。
cuda::thread_scope::thread_scope_device作为初始线程的同一GPU设备中的所有或任何CUDA线程都会同步。
cuda::thread_scope::thread_scope_system启动线程的同一系统中的所有或任何CUDA或CPU线程都会同步。

这些线程范围在CUDA标准C++库中作为标准C++的扩展来实现。

5.6 计算能力 Compute Capability

设备的计算能力用一个版本号表示,有时也被称为其“SM版本”。这个版本号标识了GPU硬件支持的特性,应用程序在运行时使用它来确定当前GPU上可用的硬件特性和/或指令。

计算能力由一个主要修订号X和一个次要修订号Y组成,表示为X.Y。

具有相同主修订号的设备具有相同的核心架构。主修订号为9的设备是基于NVIDIA Hopper GPU架构的,为8的设备是基于NVIDIA Ampere GPU架构的,为7的设备是基于Volta架构的,为6的设备是基于Pascal架构的,为5的设备是基于Maxwell架构的,为3的设备是基于Kepler架构的。

次修订号对应于对核心架构的增量改进,可能包括新的特性。

Turing是计算能力为7.5的设备的架构,是基于Volta架构的增量更新。

CUDA启用的GPU列表包含所有启用CUDA的设备及其计算能力。每种计算能力的技术规格在计算能力中提供。Tesla和Fermi架构从CUDA 7.0和CUDA 9.0开始分别不再支持。

特定GPU的计算能力版本不应与CUDA版本(例如,CUDA 7.5、CUDA 8、CUDA 9)混淆,后者是CUDA软件平台的版本。CUDA平台被应用开发者用来创建可以在许多代的GPU架构上运行的应用,包括尚未发明的未来GPU架构。虽然新版本的CUDA平台通常通过支持该架构的计算能力版本来增加对新GPU架构的本地支持,但新版本的CUDA平台通常也包括独立于硬件生成的软件特性。

这篇关于CUDA 12.4文档3 内存层次异构变成计算能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895637

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的