发行说明#

nvcomp 4.1.1#

Bug Fixes#

  • nvCOMP ZSTD 压缩在不太可能的情况下(当 ZSTD 块仅包含零字面量时)表现出故障/数据损坏。已通过添加格式要求的 RLE 字面量支持修复。

  • 修复了 Deflate 和 Gzip 未压缩数据大小计算中的错误,当非压缩块 (btype=00) 出现在 deflate 流(压缩数据)中时。

Known issues#

  • Cascaded、GDeflate、zStandard、Deflate、Gzip 和 Bitcomp 解压缩器只能在有效输入数据(使用相同压缩器压缩的数据)上运行。其他解压缩器有时可以检测到压缩流中的错误

  • Cascaded、zStandard 和 Bitcomp 批量解压缩 C API 目前无法接受 nullptr 作为 actual_decompressed_bytes 或 device_statuses 值。Deflate 和 Gzip 无法接受 nullptr 作为 device_statuses 值

  • Bitcomp 低级批量解压缩功能不是完全异步的

  • Gzip 低级接口仅提供解压缩

  • 设备 API 仅支持 LZ4/ANS 格式

nvcomp 4.1.0#

New features#

  • 通过 nvcompBatched<alg>CompressGetRequiredAlignmentsnvcompBatched<alg>DecompressRequiredAlignments 进行细粒度 LLIF 缓冲区对齐查询

  • 为 Deflate 启用了 0 级压缩(仅 Huffman)

  • 通过 set_*_allocator 系列函数在 Python 接口中支持自定义分配器

Bug Fixes#

  • 修复了 Python 接口中的内存泄漏

  • 修复了 Snappy 解压缩器中导致偏差一位 token 计数的错误

  • 通过始终生成在动态 Huffman 模式下最多具有 286 个字面量-长度代码长度的标头,使 GDeflate 压缩更符合 RFC-1951 标准

Performance Optimizations#

  • 使用 nvcomp HLIF 显著加速 Bitcomp 解压缩——对于非常小的文件为 7-8 倍(在 H100、A100 和 L40 GPU 上观察到加速),对于某些 GPU 上的较大文件为 1.3-1.5 倍(在 L40 上观察到加速)。

Known issues#

  • Cascaded、GDeflate、zStandard、Deflate、Gzip 和 Bitcomp 解压缩器只能在有效输入数据(使用相同压缩器压缩的数据)上运行。其他解压缩器有时可以检测到压缩流中的错误

  • Cascaded、zStandard 和 Bitcomp 批量解压缩 C API 目前无法接受 nullptr 作为 actual_decompressed_bytes 或 device_statuses 值。Deflate 和 Gzip 无法接受 nullptr 作为 device_statuses 值

  • Bitcomp 低级批量解压缩功能不是完全异步的

  • Gzip 低级接口仅提供解压缩

  • 设备 API 仅支持 LZ4/ANS 格式

nvcomp 4.0.1#

New Features#

  • 移除了 nvCOMP 对 CUDA 驱动程序(Linux 上的 libcuda.so 和 Windows 上的 nvcuda64.dll)存在于系统上的硬性依赖

  • Python API 现在在遇到 CUDA Driver API 问题时会抛出异常

  • 在 Deflate/GDeflate 的 Optimal Parse 中添加了对大型内部元素计数 (INT_MAX+) 的支持

Bug Fixes#

  • 修复了 Deflate/Gzip 中的一个错误,该错误导致解压缩期间偶尔出现数据损坏

Known issues#

  • Cascaded、GDeflate、zStandard、Deflate、Gzip 和 Bitcomp 解压缩器只能在有效输入数据(使用相同压缩器压缩的数据)上运行。其他解压缩器有时可以检测到压缩流中的错误

  • Cascaded、zStandard 和 Bitcomp 批量解压缩 C API 目前无法接受 nullptr 作为 actual_decompressed_bytes 或 device_statuses 值。Deflate 和 Gzip 无法接受 nullptr 作为 device_statuses 值

  • Bitcomp 低级批量解压缩功能不是完全异步的

  • Gzip 低级接口仅提供解压缩

  • 设备 API 仅支持 LZ4/ANS 格式

nvcomp 4.0.0#

New features#

  • Python API

  • 将 spdlog 替换为 culiblogger 和 fmt 以进行日志记录

  • 更改了 deflate/gdeflate 压缩模式,现在支持 0-5

    • 0 级:仅 Huffman,无 LZ。目前 Deflate 不支持。

    • 1 级:默认,与 3.0 相同

    • 2 级:实现的压缩率超过 zlib 1 级。比 1 级高出高达 27% 的比率

    • 3 级:占位符,等效于 2 级

    • 4 级:实现的压缩率与 zlib 6 级相似

    • 5 级:实现的压缩率与 zlib 9 级相似

  • HLIF 现在可以处理批次,而不仅仅是单个缓冲区

  • HLIF 现在可以在没有分块和没有 nvcomp 标头的情况下压缩数据(可以选择仅存储未压缩大小)

  • libnvcomp* 共享库文件合并到单个 libnvcomp 文件中

  • 共享库文件现在在名称中包含主版本号

  • 添加了 LZ4 设备端 API

  • 为 ANS 添加了“float16”模式,以便在使用 float16/bfloat16 数据时获得更好的比率/性能

  • 更改了所有低级 API 函数参数,使其命名和文档更加一致

  • 更新了许多内部函数,以使用 cuda::std::atomic 值代替 volatile

  • ZSTD 压缩现在可以处理高达 (2GB - 1) 的块

Bug Fixes#

  • 修复了 deflate 解压缩器中的一个错误,该错误在复制未压缩块时导致精度错误

  • 修复了当输入数据大小小于块大小时的 HLIF 编码错误

  • 修复了在高度可压缩数据上至少 2 个 delta 传递和至少 1 个 RLE 传递的级联压缩中的崩溃

  • 修复了 LZ4 中多字节(例如 int)数据类型的运行时错误

  • 修复了源于解码期间竞争条件的 Zstd 中的运行时错误

  • 修复了 Bitcomp、LZ4、Snappy 和 Zstd 中的 GPU 缓冲区过度寻址问题

  • 添加了没有冗余 device_id 参数的 HLIF 构造函数和函数

  • 修复了 ANS HLIF 假设设备 0 用于检查功能支持的情况

  • 修复了一些错误被记录到 stdout 的情况,而不管日志记录选项如何

Performance Optimizations#

  • ZSTD 解压缩在 T4 上速度提高了 2 倍,在 H100 和其他设备上速度提高了约 20%

  • 优化了 Deflate/GDeflate Optimal Parse,在 H100 上速度提高了约 10%

Known issues#

  • Cascaded、GDeflate、zStandard、Deflate、Gzip 和 Bitcomp 解压缩器只能在有效输入数据(使用相同压缩器压缩的数据)上运行。其他解压缩器有时可以检测到压缩流中的错误

  • Cascaded、zStandard 和 Bitcomp 批量解压缩 C API 目前无法接受 nullptr 作为 actual_decompressed_bytes 或 device_statuses 值。Deflate 和 Gzip 无法接受 nullptr 作为 device_statuses 值

  • Bitcomp 低级批量解压缩功能不是完全异步的

  • Gzip 低级接口仅提供解压缩

  • 设备 API 仅支持 LZ4/ANS 格式

  • Deflate 和 GZip 可能会在解压缩期间损坏数据。目前,在使用低级接口 (LLIF) 时,建议进行外部校验和或 CRC 验证,而高级接口 (HLIF) 可以在内部计算和验证具有 ComputeAndVerify 校验和选项的校验和。

nvcomp 3.0.6#

Bug Fixes#

  • 修复了导致 ZSTD 解压缩错误的错误(在 3.0.0 中引入)。

nvcomp 3.0.5#

Bug Fixes#

  • 修复了导致 Snappy 解压缩中 compute-sanitizer memcheck 失败的错误。

nvcomp 3.0.4#

Bug Fixes#

  • 修复了在某些情况下导致 Snappy 解压缩不正确的错误(在 3.0.0 中引入)。

  • 修复了导致与 ZSTD 的 CPU 解压缩器不兼容的错误(在 3.0.0 中引入)

nvcomp 3.0.3 (2023-10-06)#

Bug Fixes#

  • 修复了在某些情况下导致 Snappy 解压缩不正确的错误(在 3.0.0 中引入)。

nvcomp 3.0.2 (2023-08-28)#

Bug Fixes#

  • 修复了在某些情况下导致 Snappy 解压缩不正确的错误(在 3.0.0 中引入)。

nvcomp 3.0.1 (2023-08-08)#

Bug Fixes#

  • 移除在 3.0.0 中添加的不必要的 nvml 依赖项

nvcomp 3.0.0 (2023-07-03)#

New features#

  • 为每个压缩器添加了 nvcomp*RequiredAlignment 常量变量

  • 如果设备缓冲区未充分对齐,低级批量函数现在返回 nvcompErrorAlignment

  • 为 ZSTD、Deflate 添加了 HLIF。更新了 HLIF 设计,使 HLIF 现在调度到 LLIF。

  • 引入了设备端 API。目前仅限于 ANS 格式

  • 添加了使用 NVCOMP_LOG_LEVEL (0-5) 和 NVCOMP_LOG_FILE 环境变量进行日志记录的支持。

Performance Optimizations#

  • 优化 zSTD 解压缩。在 H100 上速度提高了 2.2 倍,在 A100 上速度提高了 1.5 倍

  • 优化 LZ4 解压缩。在 H100 上速度提高了 1.4 倍,在 A100 上速度提高了 1.4 倍。

  • 优化 Snappy 解压缩。在 H100 上速度提高了 1.3 倍,在 A100 上速度提高了 1.9 倍。

  • 优化 Bitcomp 解压缩(标准算法)。在数据集上速度提高了 2 倍,并且更加一致

  • 将 ZSTD 压缩率提高了高达 5%(在 64 KB 块上),30%(在 512 KB 块上),以紧密匹配 CPU L1 压缩。

nvcomp 2.6.1 (2023-02-03)#

Bug fixes#

  • 修复了导致 ZSTD 中非确定性解压缩精度失败的错误

  • 添加了对 Ada (sm89) GPU 的支持

  • 修复了使用 GDeflate 高压缩算法时,某些数据集上的压缩流格式不一致的问题。

nvcomp 2.6.0 (2023-01-16)#

New features#

  • 添加了新的 nvcompBatched*CompressGetTempSizeEx API,以便在许多情况下允许不太悲观的暂存分配要求。

  • 进一步减少了 zstd 压缩暂存要求。对于非常大的批次,结合新的扩展 API,暂存分配现在约为批次总未压缩大小的 1.5 倍。

nvcomp 2.5.1 (2023-01-09)#

Bug fixes#

  • 将 GDeflate 解压缩吞吐量提高了高达 2 倍,修复了 2.5.0 中的性能回归

  • 修复了 nvCOMP 中 CUB 和 Thrust 的某些用法未命名空间的问题

  • 修复了在 2.5.0 中引入的错误,该错误导致 CPU 压缩器生成的大帧的 ZSTD 解压缩失败

nvcomp 2.5.0 (2022-12-16)#

New features#

  • 添加了标准 CRC32 支持及其 LLAPI。

  • 添加了 Gzip 批量解压缩 LL API,包括获取解压缩大小 API。

  • 添加了独立的 bitcomp.h 标头,以访问 bitcomp 压缩器的完整功能集

  • 在 nvcomp 包中添加了 doc 目录,其中包含文档文件

  • 将 zStandard 最大压缩块大小从 64 KB 增加到 16 MB

  • 将 zStandard 解压缩吞吐量提高了高达 2 倍(在小批次上)和 40%(在大批次上)

  • 为每个压缩器添加了 nvcomp*CompressionMaxAllowedChunkSize 常量变量

  • 更新了 GDeflate 流格式,使其与 NVIDIA RTX IO 和 Microsoft DirectStorage 1.1 中的 GDeflate 压缩标准兼容。

  • 更新了 GDeflate 以支持 64 KB 字典窗口,从而允许更高的压缩率。

  • 更新了 GDeflate CPU 实现以使用开源 libdeflate 仓库:https://github.com/NVIDIA/libdeflate

  • 添加了对 SM90 的初始支持

Bug fixes#

  • 修复了 Snappy 压缩中的 memcheck 失败

  • 修复了与非常小的块大小相关的 deflate 压缩问题

  • 修复了 ANS、Bitcomp、Cascaded、Deflate 和 Gdeflate 压缩器中零字节块的处理

  • 修复了 Bitcomp 中最大压缩大小被略微低估的错误。

nvcomp 2.4.1 (2022-10-06)#

New features#

  • Deflate 批量解压缩 API 现在可以接受 nullptr 作为 actual_decompressed_bytes。

Bug fixes#

  • 修复了使用低级“分块”基准测试的 duplicates 功能 (-x <count>) 时的不正确行为、失败或崩溃。

  • 更新了 deflate_cpu_compression 示例以使用正确的 API。

  • Deflate 批量解压缩 API 可以在大于 64KB 的未压缩数据块上工作。

  • 修复了计算能力 6.1 中的正确性/稳定性问题

nvcomp 2.4.0 (2022-09-23)#

New features#

  • 为 LL API 添加了 ZSTD 压缩支持

  • 早期访问 Linux SBSA 二进制文件。

Bug fixes#

  • 修复了级联压缩器 bitpack 未考虑无符号数据类型,导致压缩率欠佳的问题

  • 修复了 cmake 问题,其中我们声明了错误的版本兼容性

Performance Optimizations#

  • 优化了 GDeflate 高压缩模式。速度提高了高达 2 倍。

  • 优化了 ZSTD 解压缩。速度提高了高达 1.2 倍。

  • 优化了 Deflate 解压缩。速度提高了高达 1.5 倍。

  • 优化了 ANS 压缩。强缩放允许文件大小在几 MB 左右时,压缩和解压缩吞吐量提高高达 7 倍。所有测试文件的解压缩吞吐量至少提高了 20%。

nvcomp 2.3.3 (2022-07-20)#

Bug Fixes#

  • 添加了缺失的 nvcompBatchedDeflateDecompressGetTempSizeEx API

  • 修复了 deflate 压缩中的次要正确性问题。

  • 修复了导致不必要的隐含 cudart_static 依赖项的 cmake 问题

Performance Optimizations#

  • 优化了 nvcompBatchedDeflateGetDecompressSizeAsync。现在在 A100 上速度提高了 2-3 倍。

nvcomp 2.3.2 (2022-06-24)#

Bug Fixes#

  • 修复了 ZSTD 解压缩实现中的各种错误

  • 修复了 zlib::inflate() 无法正确解压缩 deflate 压缩的问题。

nvcomp 2.3.1 (2022-06-15)#

Bug Fixes#

  • 修复了 ZSTD 解压缩实现中的各种错误

  • 修复了 ANS 压缩实现中的各种错误

  • 修复了 GDeflate 高压缩模式下大文件的挂起问题

  • 修复了库构建中需要动态链接到 cudart 的错误。

Interface Changes#

  • 添加了新的 API,nvcompBatched<Format>DecompressGetTempSizeEx()。这为 API 提供了提供总解压缩大小的可选功能,对于某些格式,这可以显著减少所需的临时大小。

nvcomp 2.3.0 (2022-04-29)#

New features#

  • 支持 LLIF 中的 ZSTD 解压缩

  • Deflate 支持 (RFC 1951)

  • 修改后的-CRC32 校验和支持添加到 HLIF。包括对用于错误检测的 HLIF 压缩缓冲区的可选验证

Bug fixes#

  • 为所有压缩器添加了 Pascal GPU 架构支持

Performance Optimizations#

  • ANS 压缩/解压缩中的性能优化,导致压缩速度提高约 100%,解压缩速度提高约 50%

  • 开发了 GDeflate 高压缩模式的算法改进。现在平均速度提高了 30-40 倍,同时产生与以前版本相同的输出

Infrastructure#

  • 改进了 LLIF 的基准测试接口——通用参数 API

nvcomp 2.2.0 (2022-02-07)#

New features#

  • GDeflate 的仅熵模式

  • 新的高级接口

  • Windows 支持

  • 对 GPU 加速 ANS 的支持

Interface Changes#

High-level interface#

  • 高级接口现在在压缩器格式之间标准化。

  • 此接口提供单个 nvcompManagerBase 对象,可以执行压缩和解压缩。用户现在可以解压缩 nvcomp 压缩的文件,而无需知道它们是如何压缩的。该接口还可以管理暂存空间,并将输入缓冲区拆分为独立的块以进行并行处理。

API Consolidation#

  • nvCOMP 现在仅支持低级批量 API 和新的高级接口

nvcomp 2.1.0 (2021-10-28)#

New features#

  • Cascaded 和 Bitcomp 方法的低级批量 API 的新版本。

  • GDeflate 中新的高吞吐量和高压缩率 GPU 压缩器

Interface Changes#

  • 更新了批量/低级压缩接口以采用 options 参数,以允许配置未来的压缩算法。

  • 更新了批量/低级解压缩接口以输出解压缩大小(如果发生错误,则输出 0)。

  • 向批量/低级解压缩例程添加了边界检查,这样,如果提供了无效的压缩数据流,则输出大小将写入 0,而不是生成非法内存访问。

  • 修复了 LZ4 以支持小于 32 KB 的块大小。

Performance Optimizations#

  • 在某些配置中,将 Snappy 压缩的性能提高了约 10%。

  • 基于将输入数据指定为 char、short 或 int 而不是仅将输入视为原始字节,为 LZ4 压缩器添加了优化。

  • 优化以减少压缩较小块时的 LZ 哈希表大小。

  • 提高了 GDeflate 中具有高吞吐量选项的压缩性能

  • 提高了 GDeflate 中的解压缩性能(根据数据集的不同,提高了 10-75%)

Bug Fixes#

  • 修复了 LZ4 CPU 压缩示例。

  • 修复了 benchmark_template_chunked 中的临时分配大小错误。

Infrastructure#

  • 更新 CMakeLists 以使用启用 -fPIC 的方式编译 nvcomp。

  • 添加了一个用于基准测试压缩算法的新脚本。

  • 为 Snappy 解压缩器添加了单元测试,该测试在合法格式的文件上测试解压缩,这些文件由于配置原因不会由 nvcomp 压缩器生成。

  • 更新 CMakeLists 以抑制关于缺少 nvcomp 外部依赖项的警告,当用户未指示他们想要包含这些依赖项时。

  • 更新 CMakeLists 以允许安装到用户不拥有所有权的 include 文件夹中。

nvcomp 2.0.2 (2021-06-30)#

  • 添加示例 lz4_cpu_decompression 以在 GPU 上使用 nvCOMP 进行压缩,并在 CPU 上使用 liblz4 进行解压缩。

  • 为构建静态库添加 CMake 选项。

  • 修复了 LZ4 压缩内核中的错误,以符合 LZ4 块结束限制。

  • 修复了 benchmark_lz4_chunked 中的临时分配大小错误。

nvcomp 2.0.1 (2021-06-08)#

  • 改进了将 nvCOMP 用作子模块的 CMake 设置。这包括将依赖项标记为 PRIVATE,以及添加用于构建示例、测试和基准测试的选项(例如,-DBUILD_EXAMPLES=ON-DBUILD_TESTS=ON-DBUILD_BENCHMARKS=ON)。

  • 修复了 benchmark_snappy_synth 中的双重释放错误。

  • 修复了 GPU 上输出大小的级联压缩中的复制方向。

  • 提高了测试覆盖率。

  • include/nvcomp.h 中定义的通用解压缩接口标记为已弃用。

nvcomp 2.0.0 (2021-04-28)#

  • 替换了以前的 C 和 C++ API。

  • 添加了 Snappy 压缩(批量接口)。

  • 添加了对使用 Bitcomp 和 GDeflate 外部压缩器的支持。

  • 添加了 /examples 文件夹,演示了与 LZ4 和 GDeflate 的 CPU 实现以及 GPU Direct Storage 的用例接口。

  • 改进了 Windows 中基准测试实现的支持。

  • 使基准测试中 std::uniform_int_distribution<> 的用法符合 C++14 标准。

  • 修复了在小输入情况下使用默认配置(‘auto’)时,级联压缩中的问题。

nvcomp 1.2.3 (2021-04-07)#

  • 修复了 Pascal 架构的 LZ4 压缩内核中的错误。

nvcomp 1.2.2 (2021-02-08)#

  • 修复了 Clang++ 中的链接错误。

  • 修复了当输出内存初始化为全部 -1 时,级联压缩错误返回错误的问题。

  • 修复了 C++17 样式静态断言。

  • 修复了级联压缩中过早释放内存的问题。

  • 修复了基准测试的输入格式和用法消息传递。

nvcomp 1.2.1 (2020-12-21)#

  • 修复了级联选择器的编译错误和单元测试。

nvcomp 1.2.0 (2020-12-19)#

  • 添加了级联选择器和级联自动接口集,用于自动配置级联压缩。

  • 通常改进了错误处理和消息传递。

  • 更新了 CMake 配置以支持 CCache。

nvcomp 1.1.1 (2020-12-02)#

  • 添加了 all-gather 基准测试。

  • 如果 CUDA 版本为 11 或更高版本,则添加 sm80 目标。

nvcomp 1.1.0 (2020-10-05)#

  • 为 LZ4 添加了批量 C 接口,允许一次压缩/解压缩多个输入。

  • 显著提高了 LZ4 压缩的性能。

nvcomp 1.0.2 (2020-08-12)#

  • 修复了 LZ4 的元数据释放,以避免可能的 new[]delete 不匹配。

nvcomp 1.0.1 (2020-08-07)#

  • 修复了 include/lz4.h 中 nvcompLZ4CompressX 函数的命名,使其具有 nvcomp 前缀。

  • 更改了 CascadedMetadata::Header 结构初始化,以解决内部编译器错误。

nvcomp 1.0.0 (2020-07-31)#

  • 初始公开版本。