Technical Walkthrough

CUDA 11 功能揭晓

 

基于 NVIDIA Ampere GPU 架构的新型 NVIDIA A100 GPU 在加速计算方面实现了最大的一代飞跃。 A100 GPU 具有革命性的硬件功能,我们很高兴宣布 CUDA 11 与 A100 结合使用。

CUDA 11 使您能够利用新的硬件功能来加速 HPC 、基因组学、 5G 、渲染、深度学习、数据分析、数据科学、机器人技术和更多不同的工作负载。

CUDA 11 包含了从平台系统软件到您开始开发 GPU 加速应用程序所需的所有功能。本文概述了此版本中的主要软件功能:

  • 支持 NVIDIA Ampere GPU 架构,包括新的 NVIDIA A100 GPU ,用于加速 AI 和 HPC 数据中心的扩展和扩展;具有 NVSwitch 结构的多 GPU 系统,如 DGX A100 型HGX A100 型
  • 多实例 GPU ( MIG )分区功能,这对云服务提供商( csp )提高 GPU 利用率特别有利。
  • 新的第三代张量核心加速混合精度,不同数据类型的矩阵运算,包括 TF32 和 Bfloat16 。
  • 用于任务图、异步数据移动、细粒度同步和二级缓存驻留控制的编程和 API 。
  • CUDA 库中用于线性代数、 fft 和矩阵乘法的性能优化。
  • Nsight 产品系列的更新,用于跟踪、分析和调试 CUDA 应用程序。
  • 全面支持所有主要的 CPU 体系结构,跨 x86 趶 64 、 Arm64 服务器和电源体系结构。

一篇文章不能公正地反映 CUDA 11 中提供的每一个特性。在这篇文章的最后,有一些链接到 GTC 数字会议,这些会议提供了对新的 CUDA 特性的深入探讨。

CUDA 和 NVIDIA Ampere微体系结构 GPUs

NVIDIA Ampere GPU 微体系结构采用 TSMC 7nm N7 制造工艺制造,包括更多的流式多处理器( SMs )、更大更快的内存以及与第三代 NVLink 互连带宽,以提供巨大的计算吞吐量。

A100 的 40 GB ( 5 站点)高速 HBM2 内存的带宽为 1 . 6 TB /秒,比 V100 快 1 . 7 倍以上。 A100 上 40 MB 的二级缓存几乎比 Tesla V100 大 7 倍,提供 2 倍以上的二级缓存读取带宽。 CUDA 11 在 A100 上提供了新的专用二级缓存管理和驻留控制 API 。 A100 中的短消息包括一个更大更快的一级缓存和共享内存单元(每平方米 192 千字节),提供 1 . 5 倍于沃尔塔 V100GPU 的总容量。

A100 配备了专门的硬件单元,包括第三代张量核心、更多视频解码器( NVDEC )单元、 JPEG 解码器和光流加速器。所有这些都被各种 CUDA 库用来加速 HPC 和 AI 应用程序。

接下来的几节将讨论 NVIDIA A100 中引入的主要创新,以及 CUDA 11 如何使您充分利用这些功能。 CUDA 11 为每个人提供了一些东西,无论你是管理集群的平台 DevOps 工程师,还是编写 GPU 加速应用程序的软件开发人员。有关 NVIDIA 微体系结构的更多信息,请参见 NVIDIA 深度Ampere架构

多实例

MIG 功能可以将单个 A100 GPU 物理划分为多个 GPUs 。它允许多个客户机(如 vm 、容器或进程)同时运行,同时在这些程序之间提供错误隔离和高级服务质量( QoS )。

图 1 。 A100 中的新 MIG 功能。

A100 是第一款 GPU 可以通过 NVLink 扩展到完整的 GPU ,也可以通过降低每个 GPU 实例的成本,使用 MIG 扩展到许多用户。 MIG 支持多个用例来提高 GPU 的利用率。这可能是 CSP 租用单独的 GPU 实例,在 GPU 上运行多个推理工作负载,托管多个 Jupyter 笔记本会话进行模型探索,或者在组织中的多个内部用户(单个租户、多用户)之间共享 GPU 的资源。

nvidia-smi 对 CUDA 是透明的,现有的 CUDA 程序可以在 MIG 下运行,以减少编程工作量。 CUDA 11 允许使用 NVIDIA 管理库( NVML )或其命令行界面 NVIDIA ( nvidia-smi MIG 子命令)在 Linux 操作系统上配置和管理 MIG 实例。

使用启用了 MIG 的 集装箱工具包 和 A100 ,您还可以使用 Docker 运行 GPU 容器(使用从 Docker 19 . 03 开始的 --gpus 选项)或使用 NVIDIA 设备插件 扩展 Kubernetes 容器平台。

下面的命令显示了使用 nvidia-smi 进行的 MIG 管理:

# List gpu instance profiles:
# nvidia-smi mig -i 0 -lgip
+-------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|=========================================================================|
| 0 MIG 1g.5gb 19 0/7 4.95 No 14 0 0 |
| 1 0 0 |
+-------------------------------------------------------------------------+
| 0 MIG 2g.10gb 14 0/3 9.90 No 28 1 0 |
| 2 0 0 |
+-------------------------------------------------------------------------+
| 0 MIG 3g.20gb 9 0/2 19.81 No 42 2 0 |
| 3 0 0 |
+-------------------------------------------------------------------------+
| 0 MIG 4g.20gb 5 0/1 19.81 No 56 2 0 |
| 4 0 0 |
+-------------------------------------------------------------------------+
| 0 MIG 7g.40gb 0 0/1 39.61 No 98 5 0 |
| 7 1 1 |
+-------------------------------------------------------------------------+ 

系统软件平台支持

为企业级应用程序 NVIDIA 引入了新的恢复功能,避免了 NVIDIA A100 对内存使用的影响。先前架构上不可纠正的 ECC 错误将影响 GPU 上所有正在运行的工作负载,需要重置 GPU 。

在 A100 上,影响仅限于遇到错误并被终止的应用程序,而其他正在运行的 CUDA 工作负载不受影响。 GPU 不再需要重置来恢复。 NVIDIA 驱动程序执行动态页面黑名单以标记页面不可用,以便当前和新的应用程序不会访问受影响的内存区域。

当 GPU 被重置时,作为常规 GPU / VM 服务窗口的一部分, A100 配备了一种称为行重映射的新硬件机制,它用备用单元替换内存中降级的单元,并避免在物理内存地址空间中造成任何漏洞。

带有 CUDA 11 的 NVIDIA 驱动程序现在报告了与带内(使用 NVML / NVIDIA -smi )和带外(使用系统 BMC )行重映射相关的各种度量。 A100 包括新的带外功能,包括更多可用的 GPU 和 NVSwitch 遥测、控制和改进的 GPU 和 BMC 之间的总线传输数据速率。

为了提高多 GPU 系统(如 DGX A100 和 HGX A100 )的弹性和高可用性,系统软件支持禁用发生故障的 GPU 或 NVSwitch 节点的能力,而不是像前几代系统中那样禁用整个基板。

CUDA 11 是第一个为 Arm 服务器添加生产支持的版本。通过将 Arm 的 节能 CPU 体系结构 与 CUDA 相结合, Arm 生态系统将受益于 GPU ——一种针对各种用例的加速计算:从边缘、云、游戏到超级计算机。 CUDA 11 支持 Marvell 的高性能 基于 ThunderX2 服务器,并与 Arm 和生态系统中的其他硬件和软件合作伙伴密切合作,以快速支持 GPUs 。

第三代多精度张量核

NVIDIA A100 中每个 SM 的四个大张量核(总共 432 个张量核)为所有数据类型提供更快的矩阵乘法累加( MMA )操作: Binary 、 INT4 、 INT8 、 FP16 、 Bfloat16 、 TF32 和 FP64 。

您可以通过不同的深度学习框架、 CUDA C ++模板抽象来访问张量核, CUTLASS 、 CUDA 库 cuBLAS 、 CuSOLVER 、 CursSuror 或 TensorRT 。

CUDA C ++利用张量矩阵( WMMA ) API 使张量核可用。这种便携式 API 抽象公开了专门的矩阵加载、矩阵乘法和累加运算以及矩阵存储操作,以有效地使用 CUDA C ++程序的张量核。 WMMA 的所有函数和数据类型都可以在 nvcuda::wmma 命名空间中使用。您还可以使用 mma_sync PTX 指令直接访问 A100 的张量核心(即具有计算能力 compute _及更高版本的设备)。

CUDA 11 增加了对新的输入数据类型格式的支持: Bfloat16 、 TF32 和 FP64 。 Bfloat16 是另一种 FP16 格式,但精度降低,与 FP32 数值范围匹配。它的使用会降低带宽和存储需求,从而提高吞吐量。 BFLAT16 作为一个新的 CUDA C ++ __nv_bfloat16 数据类型在 CUDA α BF16 . H 中通过 WMMA 公开,并由各种 CUDA 数学库支持。

TF32 是一种特殊的浮点格式,用于张量核心。 TF32 包括一个 8 位指数(与 FP32 相同)、 10 位尾数(精度与 FP16 相同)和一个符号位。这是默认的数学模式,允许您在不改变模型的情况下,获得超过 FP32 的 DL 训练加速。最后, A100 为 MMA 操作带来了双精度( FP64 )支持, WMMA 接口也支持这种支持。

图 2 。矩阵运算支持的数据类型、配置和性能表。

编程 NVIDIA Ampere架构 GPUs

为了提高 GPU 的可编程性和利用 NVIDIA A100 GPU 的硬件计算能力, CUDA 11 包括内存管理、任务图加速、新指令和线程通信结构的新 API 操作。下面我们来看看这些新操作,以及它们如何使您能够利用 A100 和 NVIDIA Ampere微体系结构。

内存管理

最大化 GPU 内核性能的优化策略之一是最小化数据传输。如果内存驻留在全局内存中,将数据读入二级缓存或共享内存 MIG ht 的延迟需要几百个处理器周期。

例如,在 GV100 上,共享内存提供的带宽比全局内存快 17 倍,比 L2 快 3 倍。因此,一些具有生产者 – 消费者范式的算法可以观察到在内核之间的 L2 中持久化数据的性能优势,从而获得更高的带宽和性能。

在 A100 上, CUDA 11 提供了 API 操作,以留出 40 MB 二级缓存的一部分来持久化对全局内存的数据访问。持久访问优先使用二级缓存的这一预留部分,而全局内存的正常或流式访问只能在持久访问未使用的情况下使用这部分二级缓存。

L2 持久性可以设置为在 CUDA 流或 CUDA 图内核节点中使用。在留出二级缓存区域时,需要考虑一些问题。例如,在不同的流中并发执行的多个 CUDA 内核在具有不同的访问策略窗口时,共享二级预留缓存。下面的代码示例显示为持久性预留二级缓存比率。

cudaGetDeviceProperties( &prop, device_id);
// Set aside 50% of L2 cache for persisting accesses size_t size = min( int(prop.l2CacheSize * 0.50) , prop.persistingL2CacheMaxSize );
cudaDeviceSetLimit( cudaLimitPersistingL2CacheSize, size); // Stream level attributes data structure cudaStreamAttrValue attr ;​ attr.accessPolicyWindow.base_ptr = /* beginning of range in global memory */ ;​ attr.accessPolicyWindow.num_bytes = /* number of bytes in range */ ;​ // hitRatio causes the hardware to select the memory window to designate as persistent in the area set-aside in L2 attr.accessPolicyWindow.hitRatio = /* Hint for cache hit ratio */ // Type of access property on cache hit attr.accessPolicyWindow.hitProp = cudaAccessPropertyPersisting;​
// Type of access property on cache miss
attr.accessPolicyWindow.missProp = cudaAccessPropertyStreaming; cudaStreamSetAttribute(stream,cudaStreamAttributeAccessPolicyWindow,&attr);

虚拟内存管理 API 操作 已经扩展到支持对固定的 GPU 内存的压缩,以减少 L2 到 DRAM 的带宽。这对于深度学习训练和推理用例非常重要。使用 cuMemCreate 创建可共享内存句柄时,将向 API 操作提供分配提示。

算法(如 3D 模板或卷积)的有效实现涉及内存复制和计算控制流模式,其中数据从全局内存传输到线程块的共享内存,然后进行使用该共享内存的计算。全局到共享内存的复制扩展为从全局内存读取到寄存器,然后写入共享内存。

CUDA 11 允许您利用一种新的异步复制( async-copy )范式。它本质上是将数据从全局复制到共享内存与计算重叠,并避免使用中间寄存器或一级缓存。异步复制的好处是:控制流不再遍历内存管道两次,不使用中间寄存器可以减少寄存器压力,增加内核占用。在 A100 上,异步复制操作是硬件加速的。

下面的代码示例显示了一个使用异步复制的简单示例。生成的代码虽然性能更好,但可以通过对多批异步复制操作进行管道化来进一步优化。这种额外的流水线可以消除代码中的一个同步点。

异步复制是在 CUDA 11 中作为实验特性提供的,并且使用协作组集合公开。 CUDA C ++程序设计指南 包括在 A100 中使用多级流水线和硬件加速屏障操作的异步复制的更高级示例。

//Without async-copy using namespace nvcuda::experimental;
__shared__ extern int smem[];​ // algorithm loop iteration
​while ( ... ) {​ __syncthreads(); // load element into shared mem for ( i = ... ) {​ // uses intermediate register // {int tmp=g[i]; smem[i]=tmp;} smem[i] = gldata[i]; ​ }​
//With async-copy using namespace nvcuda::experimental;
__shared__ extern int smem[];​ pipeline pipe; // algorithm loop iteration
​while ( ... ) {​ __syncthreads(); // load element into shared mem for ( i = ... ) {​ // initiate async memory copy memcpy_async(smem[i], gldata[i], pipe); ​ }​ // wait for async-copy to complete pipe.commit_and_wait(); __syncthreads();​ /* compute on smem[] */​ }​

任务图加速

CUDA 10 中引入的 CUDA 图 代表了使用 CUDA 提交工作的新模型。图由一系列操作组成,如内存拷贝和内核启动,它们由依赖关系连接,并在执行时单独定义。

图形支持定义一次重复运行的执行流。它们可以减少累积的启动开销并提高应用程序的整体性能。对于深度学习应用程序来说尤其如此,这些应用程序可能会启动多个内核,任务大小和运行时会减少,或者任务之间可能存在复杂的依赖关系。

从 A100 开始, GPU 提供任务图硬件加速来预取网格启动描述符、指令和常量。与以前的 GPUs 如 V100 相比,在 A100 上使用 CUDA 图改善了内核启动延迟。

图 3 。使用 CUDA 图改进了每个内核( 128 个节点) CPU 启动延迟

CUDA Graph API 操作现在有了一个轻量级的机制,可以支持对实例化图的就地更新,而不需要重新构建图。在图的重复实例化过程中,节点参数(如内核参数)通常会在图拓扑保持不变的情况下发生变化。 Graph API 操作提供了一种更新整个图形的机制,您可以使用更新的节点参数提供拓扑相同的 cudaGraph_t 对象,或者显式更新单个节点。

另外, CUDA 图现在支持协同内核启动( cuLaunchCooperativeKernel ),包括与 CUDA 流进行奇偶校验的流捕获。

线集体

以下是 CUDA 11 添加到 合作小组 中的一些增强,这些增强在 CUDA 9 中引入。协作组是一种集体编程模式,旨在使您能够显式地表达线程可以在其中通信的粒度。这使得 CUDA 内的新的协作并行模式得以实现。

在 CUDA 11 中,协作组集体公开了新的 A100 硬件特性,并添加了几个 API 增强。有关完整更改列表的详细信息,请参阅 CUDA C ++程序设计指南

A100 引入了一个新的 reduce 指令,它对每个线程提供的数据进行操作。这是一个新的使用协作组的集合,它提供了一个可移植的抽象,也可以在旧的体系结构上使用。 reduce 操作支持算术(例如 add )和逻辑(例如和)操作。下面的代码示例显示 reduce 集合。

// Simple Reduction Sum
#include <cooperative_groups/reduce.h> ... const int threadId = cta.thread_rank(); int val = A[threadId]; // reduce across tiled partition reduceArr[threadId] = cg::reduce(tile, val, cg::plus<int>()); // synchronize partition cg::sync(cta); // accumulate sum using a leader and return sum

协作组提供了集体操作( labeled_partition ),将父组划分为一维子组,在这些子组中线程被合并在一起。这对于试图通过条件语句的基本块跟踪活动线程的控制流特别有用。

例如,可以使用 labeled_partition 在一个 warp 级别组(不限制为 2 的幂)中形成多个分区,并在原子加法操作中使用。 labeled_partition API 操作计算条件标签,并将具有相同标签值的线程分配到同一组中。

下面的代码示例显示自定义线程分区:

// Get current active threads (that is, coalesced_threads())
cg::coalesced_group active = cg::coalesced_threads(); // Match threads with the same label using match_any() int bucket = active.match_any(value); cg::coalesced_group subgroup = cg::labeled_partition(active, bucket); // Choose a leader for each partition (for example, thread_rank = 0)
// if (subgroup.thread_rank() == 0) { threadId = atomicAdd(&addr[bucket], subgroup.size()); } // Now use shfl to transfer the result back to all threads in partition
return (subgroup.shfl(threadId, 0));

CUDA C ++语言及其编译器改进

CUDA 11 也是第一个正式将 CUB 作为 CUDA 工具包一部分的版本。 CUB 现在是支持的 CUDA C ++核心库之一。

CUDA 11 的 nvcc 公司 的一个主要特性是支持链路时间优化( LTO ),以提高单独编译的性能。 LTO 使用 --dlink-time-opt-dlto 选项,在编译期间存储中间代码,然后在链接时执行更高级别的优化,例如跨文件内联代码。

nvcc 公司 在 CUDA 11 中添加了对 ISO C ++ 17 的支持,并支持 PGI 、 GCC 、 CLAN 、 ARM 和微软 VisualStudio 上的新主机编译器。如果您想尝试尚未支持的主机编译器, CUDA 在编译构建工作流期间支持一个新的 nvcc 公司 标志。 --allow-unsupported-compiler 添加了其他新功能,包括:

  • 改进的 lambda 支持
  • 依赖文件生成增强功能( -MD-MMD 选项)
  • 传递选项到主机编译器
图 4 。 CUDA 11 中的平台支撑。

CUDA 库

CUDA 11 中的库通过使用线性代数、信号处理、基本数学运算和图像处理中常见的 api 中的最新和最好的 A100 硬件特性,继续推动性能和开发人员生产力的边界。

图 5 。 NVIDIA A100 的 CUDA 数学库中的新功能。

在整个线性代数库中,您将看到 A100 上提供的全系列精度的张量核心加速度,包括 FP16 、 Bfloat16 、 TF32 和 FP64 。这包括 cuBLAS 中的 BLAS3 运算, cuSOLVER 中的因子分解和稠密线性解算器,以及 cuTENSOR 中的张量收缩。

除了提高精度范围外,对矩阵维数和张量核心加速度对齐的限制也被取消。为了达到适当的精度,加速现在是自动的,不需要用户选择加入。 cuBLAS 的启发式算法在 A100 上使用 MIG 在 GPU 实例上运行时自动适应资源。

图 6 。用 cuBLAS 对 A100 进行混合精度矩阵乘法。

弯刀 、 CUDA C ++模板用于高性能 GEMM 的抽象,支持 A100 提供的各种精度模式。有了 CUDA 11 , Cutless 现在达到了 95% 以上的性能与 cuBLAS 相当。这允许您编写您自己的自定义 CUDA 内核来编程 NVIDIA GPUs 中的张量核心。

图 7 。 NVIDIA A100 的剪刀模板抽象。
图 8 。 CUDA 库如何允许您利用 A100 中的张量核心。

cuFFT 利用了 A100 中更大的共享内存大小,从而在较大的批处理大小下为单精度 fft 带来更好的性能。最后,在多个 GPU A100 系统上,与 V100 相比, cuFFT 可扩展并提供 2 倍于 GPU 的性能。

nvJPEG 是一个用于 JPEG 解码的 GPU 加速库。它与数据扩充和图像加载库 NVIDIA DALI 一起,可以加速图像分类模型,特别是计算机视觉的深度学习训练。图书馆加速了深度学习工作流的图像解码和数据扩充阶段。

A100 包括一个 5 核硬件 JPEG 解码引擎, nvJPEG 利用硬件后端对 JPEG 图像进行批处理。专用硬件块的 JPEG 加速缓解了 CPU 上的瓶颈,并允许更好的 GPU 利用率。

选择硬件解码器是由给定图像的 nvjpegDecode 自动完成的,或者通过使用 nvjpegCreateEx init 函数显式选择硬件后端来完成的。 nvJPEG 提供基线 JPEG 解码的加速,以及各种颜色转换格式,例如 yuv420 、 422 和 444 。

图 8 显示,与仅使用 CPU 处理相比,这将使图像解码速度提高 18 倍。如果您使用 DALI ,您可以直接受益于这种硬件加速,因为 nvJPEG 是抽象的。

图 9 。 nvJPEG 加速比 CPU 。
(第 128 批使用 Intel Platinum 8168 @ 2GHz 3 . 7GHz Turbo HT ;使用 TurboJPEG )

在 CUDA 数学库中,有许多特性比一篇文章所能涵盖的还要多。

开发人员工具

CUDA 11 继续为现有的开发人员工具组合添加丰富的功能,其中包括熟悉的 Visual Studio 插件和 NVIDIA Nsight 集成 for Visual Studio ,以及 Eclipse 和 Nsight Eclipse 插件版。它还包括独立的工具,如用于内核评测的 Nsight Compute 和用于系统范围性能分析的 Nsight 系统。 Nsight Compute 和 Nsight 系统现在在 CUDA 支持的三种 CPU 架构上都得到支持: x86 、 POWER 和 Arm64 。

图 10 。 Nsight 系统(跟踪)和 Nsight 计算(内核评测)。

Nsight Compute for CUDA 11 的一个关键特性是能够生成应用程序的屋顶线模型。 Roofline 模型是一种直观直观的方法,可以让您通过将浮点性能、算术强度和内存带宽组合到二维图中来了解内核特性。

通过查看 Roofline 模型,可以快速确定内核是受计算限制还是内存受限。您还可以了解进一步优化的潜在方向,例如,靠近屋顶线的内核可以优化利用计算资源。

有关详细信息,请参见 屋顶线性能模型

图 11 。 Nsight 计算中的屋顶线模型。

CUDA 11 包括 Compute Sanitizer ,这是下一代的功能正确性检查工具,它为内存访问和竞争条件提供运行时检查。 Compute Sanitizer 旨在替代 cuda-memcheck 工具。

下面的代码示例显示了计算消毒剂检查内存访问的示例。

//Out-of-bounds Array Access __global__ void oobAccess(int* in, int* out)
{ int bid = blockIdx.x; int tid = threadIdx.x; if (bid == 4) { out[tid] = in[dMem[tid]]; }
} int main()
{ ... // Array of 8 elements, where element 4 causes the OOB std::array<int, Size> hMem = {0, 1, 2, 10, 4, 5, 6, 7}; cudaMemcpy(d_mem, hMem.data(), size, cudaMemcpyHostToDevice); oobAccess<<<10, Size>>>(d_in, d_out); cudaDeviceSynchronize(); ... $ /usr/local/cuda-11.0/Sanitizer/compute-sanitizer --destroy-on-device-error kernel --show-backtrace no basic
========= COMPUTE-SANITIZER
Device: Tesla T4
========= Invalid __global__ read of size 4 bytes
========= at 0x480 in /tmp/CUDA11.0/ComputeSanitizer/Tests/Memcheck/basic/basic.cu:40:oobAccess(int*,int*)
========= by thread (3,0,0) in block (4,0,0)
========= Address 0x7f551f200028 is out of bounds

下面的代码示例显示了用于竞争条件检查的计算消毒剂示例。

//Contrived Race Condition Example __global__ void Basic()
{ __shared__ volatile int i; i = threadIdx.x;
} int main()
{ Basic<<<1,2>>>(); cudaDeviceSynchronize(); ... $ /usr/local/cuda-11.0/Sanitizer/compute-sanitizer --destroy-on-device-error kernel --show-backtrace no --tool racecheck --racecheck-report hazard raceBasic
========= COMPUTE-SANITIZER
========= ERROR: Potential WAW hazard detected at __shared__ 0x0 in block (0,0,0) :
========= Write Thread (0,0,0) at 0x100 in /tmp/CUDA11.0/ComputeSanitizer/Tests/Racecheck/raceBasic/raceBasic.cu:11:Basic(void)
========= Write Thread (1,0,0) at 0x100 in /tmp/CUDA11.0/ComputeSanitizer/Tests/Racecheck/raceBasic/raceBasic.cu:11:Basic(void)
========= Current Value : 0, Incoming Value : 1
=========
========= RACECHECK SUMMARY: 1 hazard displayed (1 error, 0 warnings)

最后,尽管 CUDA 11 不再支持在 macOS 上运行应用程序,但我们正在为 macOS 主机上的用户提供开发工具:

  • 使用 cuda-gdb 进行远程目标调试
  • NVIDIA Visual Profiler
  • Nsight Eclipse 插件
  • 用于远程分析或跟踪的 Nsight 工具系列

摘要

CUDA 11 为在 NVIDIA A100 上构建应用程序提供了基础开发环境,用于构建 NVIDIA Ampere GPU 体系结构和强大的服务器平台,用于 AI 、数据分析和 HPC 工作负载,这些平台均用于内部( DGX A100 型 )和云( HGX A100 型 )部署。

图 12 。得到 CUDA 11 的不同方法。

CUDA 11 现在可用。和往常一样,您可以通过多种方式获得 CUDA 11 : 下载 本地安装程序包,使用包管理器进行安装,或者从各种注册中心获取容器。对于企业部署, CUDA 11 还包括 RHEL8 的 驱动程序打包改进 ,使用模块化流来提高稳定性并减少安装时间。

要了解有关 CUDA 11 的更多信息并获得问题的答案,请注册以下即将到来的在线研讨会:

另外,请注意下面相关的 GTC 会谈,深入探讨本文所涉及的 A100 的特性。这些 GTC 录制的会谈将于 5 月发布:

最后,注册 NVIDIA 开发人员计划 以接收 CUDA 11 和 CUDA 未来版本的更新。