Release Notes

Release Notes

2025.1 版本更新

  • 增加了对额外 Blackwell GPU 的支持。

  • 修改了回溯信息的显示方式:默认情况下,从文件中剥离路径,并避免显示 main 函数以下和额外的 CUDA 运行时帧。添加了 --strip-path--backtrace-short 选项来控制此行为。

  • 增加了对原生 Python 主机回溯的支持。

  • 为 PTX tcgen05 指令增加了护栏支持。有关更多信息,请参阅 Tensor Core MMA 护栏文档

  • 添加了在遇到用户发出的断点时生成报告的功能。

  • 增加了对 OptiX 9.0 的支持。

  • 为 PTX cp.async.mbarrier.arrive 异步连接操作添加了 Sanitizer API 补丁支持。

  • 为发布后的 syncwarp 添加了 Sanitizer API 补丁支持。

  • 修复了在 racecheck 中使用 cp.async.mbarrier.arrive 同步 memcpy 异步操作,并使用同一线程立即访问复制目标时,可能出现的误报。

  • 修复了在使用 syncwarp 时,racecheck 中可能出现的误报。

  • 修复了在某些情况下,程序循环初始化 PTX mbarrier 时,synccheck 和 racecheck 过度消耗设备和主机内存的问题。

  • 修复了在具有多个集群时,racecheck 报告中可能显示的错误块坐标。

2024.4 版本更新

  • 增加了对 Blackwell 架构的支持。

  • 增加了对 Tensor core barriers 的支持。

  • st.bulk PTX 指令添加了公共 API 和 memcheck 支持。

  • 为从全局内存到共享内存的 cp.async.bulk PTX 指令添加了 racecheck 支持。

  • 提高了 racecheck 间接 barrier 依赖项选项的性能,并默认启用它。

  • 修复了在某些情况下,对于有限的指令集,设备回调会使用错误的线程调用的问题。

  • 修复了 cuda::barrier 跟踪溢出的 racecheck 和 syncheck 问题。

  • 修复了集群 barriers 的 racecheck 和 syncheck 问题。

  • 修复了从其他进程导入内存并在设置 CUDA_VISIBLE_DEVICES 时,memcheck 和公共 API 问题。

  • 修复了在执行 3D memcpy/memset 操作时,initcheck 可能出现的误报。

2024.3 版本更新

  • 修复了 Ampere 架构上与 cuda::barrier 相关的 synccheck 和 racecheck 可能产生的无效结果。cuda::barrier 等待事件现在在等待完成后调用,方式与 Hopper 相同。这可能需要使用 CUDA 12.4 或更高版本的编译器重新编译目标应用程序。

  • 修复了导致失败或挂起的 coredump 生成的多个问题。

  • 修复了在 barrier 地址上使用 PTX 指令 st.async 时,memcheck 可能出现的误报。

  • 修复了当使用每线程默认流或绿色上下文以及从设备到主机的同步 cudaMemcpy 时,可能发生的挂起。

  • 修复了 Windows 上主机回溯可能出现的问题。

  • 修复了在使用 PTX 指令 cp.async.bulk 时,memcheck 中可能出现的未对齐访问的误报。

2024.2 版本更新

  • 为 Hopper 架构上从全局内存到共享内存的 PTX cp.async.bulk 操作添加了公共 API 和 memcheck 支持。

  • 增加了对 OptiX 8.1 的支持。

  • 取消了对 Linux ppc64le 的支持:此平台不再受支持。

  • 修复了在特定情况下,memcheck 会将大小大于实际操作的访问报告为未对齐或越界误报的问题。

  • 修复了使用异构内存管理时可能出现的问题。

  • 修复了在 Hopper 上使用集群时,racecheck 中可能发生的崩溃或错误结果。

  • 在清除不受支持的 coredump 相关环境变量时,添加了警告。

  • 在文档中 Clarified 了何时报告 leak 错误。

2024.1.1 版本更新

  • 修复了从 .NET 应用程序调用的库中不会报告错误的问题。

2024.1 版本更新

  • 默认启用共享寻址支持:移除了 --hmm-support 选项,并将其替换为环境变量 NV_COMPUTE_SANITIZER_SHARED_ADDRESSING_SUPPORT。有关更多信息,请参阅 环境变量文档

  • --target-processes 选项的默认值更改为 all

  • 在 Hopper 上的 racecheck 中,增加了对 cuda::barrier 初始化竞争条件的检测。

  • 增加了对 initcheck API 错误抑制的支持。

  • cuMemPoolImportPointer 添加了 memcheck 支持。

  • 增加了对 CUDA 绿色上下文的支持。

  • 增加了对 CUDA 图设备端节点更新的支持。

  • 修复了在单个 warp 中使用不同的 cuda::barrier 时,synccheck 可能出现的误报。

  • 修复了在 Hopper 上使用浮点原子操作时,memcheck 可能出现的漏报。

2023.1.1 版本更新

  • 修复了 WGMMA 指令的错误输出。

2023.3 版本更新

  • 增加了对异构内存管理 (HMM) 和地址转换服务 (ATS) 的支持。此功能通过 --hmm-support 命令行选项选择启用。

  • 为设备图启动添加了 racecheck 支持。

  • 添加了使用 --suppressions 命令行选项抑制已知问题的能力。有关更多信息,请参阅 抑制文档

  • 增加了对外部内存对象的支持。这有效地增加了对 Vulkan 和 D3D12 互操作的支持。

  • 为 WSL 添加了设备回溯支持。

  • 改进了 PC 偏移输出。现在它打印在函数名称旁边,以明确它是在该函数内的汇编偏移量。

  • 当使用多个命令行选项时,不再需要显式指定 “yes” 或 “no”。

  • 将选项 --kernel-regex--kernel-regex-exclude 重命名为 --kernel-name--kernel-name-exclude

  • 将正则表达式过滤键添加到 --kernel-name--kernel-name-exclude

  • 添加了新的命令行选项 --racecheck-indirect-barrier-dependency,以在 racecheck 中启用间接 cuda::barrier 跟踪。

  • 添加了新的命令行选项 --coredump-behavior,以控制生成 GPU coredump 后目标应用程序的行为。

  • 添加了新的命令行选项 --detect-missing-module-unload,以检测是否缺少对 cuModuleUnload 驱动程序 API 的调用。

  • 添加了新的命令行选项 --preload-library,以使目标应用程序在注入库之前加载共享库。

  • 修复了当内存加载被加宽并包含填充字节时,initcheck 误报的问题。

  • 修复了当使用 bar.arrive 指令时,racecheck 和 synccheck 工具中可能发生的挂起。

  • setsmemsize 指令添加了补丁 API 支持。

  • 为 barrier 释放后的 __syncthreads() 添加了补丁 API 支持。

2023.2.2 版本更新

  • 更新了版本打印输出,以包含构建和配置信息。

  • 修复了在 QNX 上捕获主机回溯时可能发生的挂起。

2023.2.1 版本更新

  • 修复了在使用线程块集群时,H100 上 racecheck 可能发生的挂起。

  • Compute Sanitizer 2023.2.1 的版本号错误地显示为 2023.2.0,需要通过其构建 ID 33053471 来区分。

2023.2 版本更新

  • 增加了对 CUDA 设备图启动的支持。

  • 为远程共享内存访问的集群入口和出口竞争检测添加了 racecheck 支持。有关更多信息,请参阅 集群入口和出口竞争检测文档

  • 增加了在启用设备堆检查时对 CUDA 延迟加载的支持。需要 CUDA 驱动程序版本 535 或更高版本。

  • 增加了在使用 --target-processes all 时,对使用 system()posix_spawn(p) 启动的子进程进行跟踪的支持。

  • 增加了对 st.asyncred.async 指令的支持。

  • 改进了在 racecheck 中使用协作组的部分 warp 同步的支持。

  • 改进了对 SM 9.x 上 cuda::barrier::wait() 的支持。

  • 为 Pascal 架构和多上下文应用程序添加了 coredump 支持。

  • 增加了对 OptiX 8.0 的支持。

  • 在某些情况下,提高了在 OptiX 应用程序中使用 initcheck 的性能。现在,使用 initcheck 跟踪 OptiX 应用程序需要 --check-optix yes 选项。

2023.1.1 版本更新

  • 修复了当使用三元运算符加载用户参数值时,memcheck 会报告越界访问的错误。

  • 修复了在将 leakcheck 与使用 CUBLAS 的应用程序一起使用时,可能发生的崩溃。

  • 修复了在使用 CUDA barriers 的应用程序中使用 synccheck 或 racecheck 时,可能出现的误报。

2023.1 版本更新

  • 为分布式共享内存添加了 racecheck 支持。

  • 将流顺序竞争检测扩展到 cudaMemcpy API。

  • 为 warpgroup 操作添加了 memcheck、synccheck 和补丁 API 支持。

  • 添加了 --coredump-name CLI 选项来设置 coredump 文件名。

  • 增加了对 Unicode 文件路径的支持。

  • 增加了对 OptiX 7.7 的支持。

2022.4.1 版本更新

  • 修复了对于使用 cluster.sync() 并使用 --device-debug 编译的代码,synccheck 会错误地报告非法指令的错误。

  • 修复了在某些特定情况下,SanitizerCallbackMemcpyAsync 中不正确的地址报告,这导致 memcheck 和 racecheck 中可能出现无效结果。

  • 修复了 OptiX 应用程序上 racecheck 可能发生的挂起和无效结果。

  • 修复了如果启用了 --check-device-heap,将 CUDA 延迟模块加载与 memcheck 或 initcheck 一起使用时,可能发生的崩溃或无效结果。在这些情况下,将自动禁用延迟模块加载。

2022.4 版本更新

  • 增加了对 __nv_aligned_device_malloc 的支持。

  • 增加了对 ldmatrixstmatrix 指令的支持。

  • 增加了在使用 --check-cache-control 命令行选项时,对缓存控制操作的支持。

  • 添加了新的命令行选项 --unused-memory-threshold,以控制未使用内存报告的阈值。

  • 改进了 racecheck 中 CUDA pipeline memcpy-async 相关 hazard 的支持。

2022.3 版本更新

  • 增加了对 NVIDIA GH100/SM 9.x GPU 架构的支持。

  • 增加了对 NVIDIA AD10x/SM 8.9 GPU 架构的支持。

  • 增加了对延迟内核加载的支持。

  • 为分布式共享内存添加了 memcheck 支持。

  • 添加了新的选项 --num-callers-device--num-callers-host,以控制在堆栈跟踪中打印的调用者数量。

  • 增加了对 OptiX 7.6 应用程序的支持。

  • 修复了 Linux ppc64le 上主机堆栈跟踪不完整的错误。

2022.2.1 版本更新

  • 修复了使用 -lineinfo 编译的应用程序的设备回溯不正确的错误。

2022.2 版本更新

  • 为 alloc 前使用和 free 后使用竞争检测添加了 memcheck 支持。有关更多信息,请参阅 流顺序竞争检测文档

  • 为异步分配、OptiX 资源和 CUDA memmap(后者仅限 Linux)添加了 leakcheck 支持。

  • 添加了忽略 cuGetProcAddress API 返回的 CUDA_ERROR_NOT_FOUND 错误代码的选项。

  • 添加了新的 sanitizer API 函数,用于分配和释放页锁定主机内存。

  • 事件管理 API 添加了 sanitizer API 回调。

2022.1.1 版本更新

  • 修复了 initcheck 问题,其中该工具会在 Windows 上启用硬件调度后,在报告未初始化访问后错误地中止 CUDA 内核启动。

2022.1 版本更新

  • 增加了对生成 coredump 的支持。

  • 改进了对堆栈溢出检测的支持。

  • 添加了新的选项 --target-processes-filter,以按名称过滤正在跟踪的进程。

  • 为异步分配添加了 initcheck 支持。需要 CUDA 驱动程序版本 510 或更高版本。

  • 为对等设备上的访问添加了 initcheck 支持。需要 CUDA 驱动程序版本 510 或更高版本。

  • 增加了对 OptiX 7 应用程序的支持。

  • 增加了在 Linux 和 Windows x86_64 上,对多进程应用程序中 32 位进程的子进程进行跟踪的支持。

2021.3.1 版本更新

  • 修复了 vGPU 上 synccheck 错误地检测到发散线程的间歇性问题。

  • 修复了跟踪多个图启动时可能发生的挂起。

2021.3 版本更新

  • 改进了 Linux 主机回溯。

  • 移除了调用 cudaDeviceReset() 以准确报告内存泄漏和未使用内存功能的要求。

  • 修复了在 Volta GPU 或更高版本的 GPU 上,在发散代码路径中调用 __syncthreads 时,synccheck 可能发生的挂起。

  • 为全局内存中的 memcheck 精确错误添加了最近分配信息的打印。

  • 添加了在调用设备端 malloc 时,如果大小为空的警告。

  • cuda::memcpy_async 添加了单独的 sanitizer API 设备回调。

  • 添加了新的命令行选项 --num-cuda-barriers,以覆盖目标应用程序使用的预期 cuda::barrier 数量。

  • 添加了新的命令行选项 --print-session-details 以打印会话信息,以及 --save-session-details 以将其保存到输出文件。

  • 增加了对 WSL2 的支持。

2021.2.3 版本更新

  • 为 L4T 构建启用了 SLS 加固和分支保护。

2021.2.2 版本更新

  • 为 L4T 构建启用了具有随机 canary 值的堆栈金丝雀。

2021.2.1 版本更新

  • 为 CUDA 内核中的 malloc/free 错误添加了设备回溯。

  • 改进了 racecheck 主机内存占用。

2021.2 版本更新

  • 为 Ampere GPU 或更高版本上的 cuda::barrier 添加了 racecheck 和 synccheck 支持。

  • 为具有部分掩码的 __syncwarp 添加了 racecheck 支持。

  • 添加了 --launch-count--launch-skip 过滤选项。有关更多信息,请参阅 命令行选项文档

  • --filter--exclude 选项已分别重命名为 --kernel-regex--kernel-regex-exclude

  • 增加了对 QNX 和 Linux aarch64 平台的支持。

  • 增加了对 CUDA 图内存节点的支持。

2021.1.1 版本更新

  • 修复了错误报告中可能显示不正确行号的问题。

2021.1 版本更新

  • 增加了通过 --padding 选项进行分配填充的支持。

  • 使用 --nvtx yes 选项添加了对 NVTX 内存 API 的实验性支持。有关更多信息,请参阅 Compute Sanitizer NVTX API 参考手册

2020.3.1 版本更新

  • 修复了多次启动 CUDA 图时的问题。

  • 修复了将协作组同步原语与 initcheck 和 synccheck 一起使用时,出现的误报。

2020.3 版本更新

  • 增加了对 CUDA 内存池和 CUDA API 减少序列化的支持。

  • 为未使用的内存报告添加了主机回溯。

2020.2.1 版本更新

  • 修复了加载大于 2 GiB 的 cubin 时发生的崩溃。

  • 修复了在具有多个 GPU 的系统上的错误检测。

  • 修复了在具有多个 GPU 的系统上,使用 CUDA 虚拟内存管理 API cuMemSetAccess 移除对设备子集的访问时出现的问题。

  • 添加了 sanitizer API,以在 sanitizer 和 CUDA 流句柄之间进行转换。

2020.2 版本更新

  • 增加了对 CUDA 图和 CUDA memmap API 的支持。

  • sanitizer API 的内存访问回调已拆分为三个不同的回调,分别对应于全局内存、共享内存和本地内存访问。

2020.1.2 版本更新

  • 添加了 sanitizer 流 API。这修复了使用每线程流时工具崩溃的问题。

2020.1.1 版本更新

  • 增加了对 Windows 硬件加速 GPU 调度的支持

  • 增加了通过 --target-processes CLI 选项,对在工具下启动的应用程序生成的子进程进行跟踪的支持。

2020.1 版本更新

  • Compute Sanitizer 的初始版本(使用 CUDA 11.0)

Sanitizer API 的更新

  • 增加了对每线程流的支持

  • 添加了 API 以检索 CUDA 函数或补丁的 PC 和大小

  • cudaStreamAttachMemAsync 添加了回调

  • 为 memcpy 回调数据添加了方向

  • 为 memcpy 和 memset 回调数据添加了流

  • 在 syscall 设置后添加了启动回调

  • 为分配回调数据添加了可见性字段

  • 为块入口回调添加了 PC 参数

  • 为内存访问回调添加了传入值

  • 为 barrier 回调添加了 threadCount

  • 为 barrier 和函数回调添加了协作组标志

2019.1 版本更新

  • Compute Sanitizer API 的初始版本(使用 CUDA 10.1)

已知限制

  • 应用程序在 Compute Sanitizer 工具下运行速度会慢得多。这可能会导致某些内核启动在使用 Compute Sanitizer 启用时因启动超时错误而失败。

  • Compute Sanitizer 不支持检查主机端内存访问冲突和泄漏,这些冲突和泄漏发生在 CUDA API 调用之外的访问(例如,从 CPU 访问缓冲区)。

  • Compute Sanitizer 工具不支持 Maxwell 设备 (SM 5.x) 上的设备回溯。

  • Compute Sanitizer 工具不支持 WSL2 上的 coredump。

  • memcheck 工具不支持对 GPU 上使用动态并行性进行的 API 调用进行 CUDA API 错误检查。

  • racecheck、synccheck 和 initcheck 工具不支持 CUDA 动态并行性。

  • 当启用 Windows 硬件加速 GPU 调度时,不支持 CUDA 动态并行性。

  • Compute Sanitizer 工具无法与其他 CUDA 开发者工具互操作。这包括 CUDA coredump,它由 Compute Sanitizer 自动禁用。可以通过使用 --generate-coredump 选项来改为启用它们。

  • initcheck 工具不支持 IPC 分配。使用它将导致误报。

  • 当启用 SLI 时,不支持 Compute Sanitizer 工具。

  • 在机密计算下不支持 racecheck 工具。

  • memcheck 工具不检测到超出保留共享内存区域的越界访问。有关保留共享内存的更多信息,请参阅 PTX 文档的特殊寄存器保留用于共享内存部分。

已知问题

  • 当报告共享内存位置上的 hazard 时,如果上次访问是原子操作,则 racecheck 工具可能会为 “Current value” 打印不正确的数据。 这也可能影响此 hazard 的严重性。

  • 在 QNX 上,当使用 --target-processes all 选项时,分析 shell 脚本可能会在脚本完成后挂起。在这种情况下,请使用 Ctrl-C 在命令行中结束应用程序。

  • 对于由 CUDA 内核初始化的填充结构上的设备到主机 cudaMemcpy 操作,initcheck 工具可能会报告误报。 #pragma pack 指令可用作禁用填充的解决方法。

  • 当由于使用 kernel-namekernel-name-excludelaunch-countlaunch-skip 选项而跳过内核启动期间发生硬件异常时,memcheck 工具将无法报告其他详细信息作为不精确的错误。

  • 在机密计算下禁用 leakcheck 功能。

支持

有关支持的平台和 GPU 的信息。

平台支持

表 1. Compute Sanitizer 支持的平台

平台

支持

Windows

Linux (x86_64)

Linux (ppc64le)

Linux (aarch64sbsa)

Linux (aarch64)

QNX

MacOSX

GPU 支持

compute-sanitizer 工具在所有支持 CUDA 的 GPU 上均受支持,SM 版本为 5.0 及更高版本。

声明

声明

所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“资料”)均按“原样”提供。NVIDIA 对这些资料不作任何明示、暗示、法定或其他方面的保证,并明确声明不承担任何关于不侵权、适销性和特定用途适用性的暗示保证。

所提供的信息据信是准确可靠的。但是,NVIDIA 公司对使用此类信息或因使用此类信息而可能导致的侵犯第三方专利或其他权利的后果不承担任何责任。未通过暗示或其他方式授予 NVIDIA 公司任何专利权下的许可。本出版物中提及的规格如有更改,恕不另行通知。本出版物取代并替换以前提供的所有其他信息。未经 NVIDIA 公司明确书面批准,NVIDIA 公司产品不得用作生命支持设备或系统中的关键组件。

商标

NVIDIA 和 NVIDIA 徽标是 NVIDIA 公司在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其关联的各自公司的商标。