Compressonator 4.0 – 利用 GPU 编码的强大功能

首次发布时间:
Navin Patel's avatar
Navin Patel

从 4.0 版本开始,Compressonator 的 Windows® 版本支持使用 DirectX® Compute (DXC) 或 OpenCL™ (OCL) 着色器进行 GPU 加速编码。本教程将介绍如何使用此功能。

使用 GPU 选项进行编码

使用命令行工具时,可以通过“ -EncodeWith < DXC | OCL> ”来选择新的编码选项;使用 GUI 应用程序的对话框时,可以选择“Encode with”下拉菜单中的“GPU_DirectX”或“GPU_OpenCL”选项,如下图所示。

作为 GUI 或 CLI 工具的替代方案,开发者可以通过以下方式将 Compressonator SDK 添加到自己的应用程序中:

  • CMP_Core 组件,用于使用支持 OpenCL™ 和 DirectX® Compute 流水线处理的 BC1 至 BC5 格式进行编码。
  • 利用使用 CMP_Framework 和 CMP_GPU_DXC 组件库的示例计算 HLSL 着色器接口。
  • 使用 CMP_Core BC1 至 BC5 和 BC7 编码器,这些编码器使用 CMP_Framework 和 CMP_GPU_OCL 组件库。

着色器编译的设置方式

首次在 Compressonator GUI 或 CLI 中使用 GPU 加速编码选项 DXC 或 OCL 时,您会注意到每个使用的编解码器 BC1 至 BC7 都会有较长的延迟。这是因为这些着色器源必须使用 D3D 或 OpenCL™ 编译器进行编译。编译完成后,着色器二进制文件“ .cmp ”将被缓存,以便后续快速使用。如果着色器在特定 GPU 平台上编译失败,GUI 或 CLI 工具将自动切换到 CPU 编码,从而保证始终能提供处理结果。

使用 GPU 编码处理 MIP 贴图

请求的 MIP 贴图级别生成取决于原始图像的宽度和高度尺寸,每个级别的大小是其前一个级别可被 2 整除。对于 GPU 的 MIP 级别生成,生成的尺寸也必须能被 4 整除。Compressonator GUI 和 CLI 应用程序会在用户请求级别无法在处理过程中实现时,自动调整用户请求的级别并发出警告消息。

自动兼容功能  

通过 GPU 或 CLI 工具,用户可以在没有任何先决条件要求的情况下,直接在任何 BCn 编解码器之间压缩 HDR 和 LDR 图像,而无需执行图像源的格式转换。

使用 GPU 加速编码器时,GUI 和 CLI 工具都会使用临时的 CPU 缓冲区来确保编码无缝流畅。要了解其工作原理,请尝试使用“Encode with”选项 GPU_DirectX 或 GPU_OpenCL 将 EXR 文件格式的图像压缩为 BC1 至 BC5 或 BC7 等格式。

如果您不熟悉如何处理纹理,请参阅在线教程 入门使用示例项目

使用编解码器质量设置

在此版本中,GPU 和 CPU 的质量设置已根据用于处理图像的 BCn 编解码器进行了修改。

BC1、BC2 和 BC3

有三个处理速度设置,分别对应快速、中速和慢速处理。目前,每种算法的质量保持不变,在下一个版本中,这些编解码器将拥有从 0.0 到 1.0 的更平滑的组合设置范围。

质量设置结果
0.0 至 0.1快速处理,使用 min/max 算法。
0.101 至 0.6中速处理,使用最小距离算法。
0.601 至 1.0慢速处理,使用斜坡算法。

BC4 和 BC5

质量设置不起作用,性能保持不变。使用简单的打包算法,没有任何细化设置。

BC6 和 BC7

具有从 0.0 到 1.0 的完整质量范围,性能从快速到非常慢不等。此处使用的算法更复杂,基于预先计算的斜坡和块分区。

使用 全局质量设置

在 GUI 中,用户可以在处理之前,使用全局设置值来覆盖所有目标压缩的单个设置。目前,只能通过新的全局设置来覆盖质量设置。设置为零将恢复旧值并禁用全局设置。

过程如下:

在“项目浏览器”中,单击一次“双击此处添加文件…”以选择其视图选项。

将显示一个新的属性视图。

设置新的“Quality”值,以覆盖“项目浏览器”对话框中使用的纹理的所有现有质量设置。值为零将恢复旧值并禁用全局设置。

设置覆盖时,“项目浏览器”中每个目标设置的“属性视图”中显示的质量设置将显示为不可编辑的覆盖设置。

还会注意到“双击此处添加文件”的背景色已更改,以指示覆盖设置正在生效。如果通过将值设置为零来关闭覆盖设置,它将恢复为白色背景。

设置后,所有纹理处理将使用覆盖值,直到将其关闭。

查看性能数值

GUI 分析视图提供了一个更新的表格视图,其中包括 GPU 编码性能统计信息。

通过这些统计数据,用户可以分析特定 GPU 或 CPU 生成的数据,以了解性能与图像质量之间的关系。

KPerf(毫秒) 

这估计了使用当前编码器和 GPU 设置处理 1000 个(4x4 纹素)块所需的时间。其中 Perf(ms) 是处理单个 16 像素块所需的时间(以毫秒为单位)。

HPC 性能监控使用 CPU 定时器,而 OCL 和 DXC 使用 GPU 性能查询定时器。

MTx/秒

这是每秒处理 1 百万个纹素所需时间的测量值。

时间(秒)

基于 CPU 性能的计时,测量了图像完成处理的整体端到端时间。包括设备设置、将图像加载到 GPU、从 GPU 接收图像以及文件 I/O。

使用日志格式选项

用户可以生成 GPU 和 CPU 使用率统计信息以及测试自动化的日志文件。process_results.txt 日志格式已更改,包含 KPerf(毫秒) 和 MTx/秒。为了适应这些更改,新日志格式的版本已从 1.0 更新到 1.1,如示例所示(日志文件中的粗体项为新增)。

使用:CompressonatorCLI -log -fd BC1 -EncodeWith OCL  .\images\ruby.bmp ruby_bc1.dds

process_results.txt 文件包含:

CompressonatorCLI Performance Log **v1.1**
Source          : .\images\ruby.bmp, Height 416, Width 576, Linear size 0.936 MBytes
Destination    : ruby_bc1.dds
Processed to : BC1 with 0 iteration(s) in 0.544 seconds
**Using    : OCL**
Quality         : 0.05
**KPerf(ms)    : 0.193**
**Mpx/s        : 1242.000**
MSE             : 9.33
PSNR            : 38.4
SSIM            : 0.9848
Total time      : 0.552 seconds

生成 CSV 日志文件 

除了 -log-logfile 之外,还添加了两个新的命令行选项,用于将分析数据输出到逗号分隔的文件格式。

使用 -logcsv-logcsvfile 生成 .csv 文件,该文件适用于任何支持以表格格式查看这些文件的应用程序,如本示例所示。

使用:CompressonatorCLI -logcsv -fd BC1 -EncodeWith HPC  .\images\ruby.bmp ruby_bc1.dds

然后:CompressonatorCLI -logcsv -fd BC1 -EncodeWith OCL  .\images\ruby.bmp ruby_bc1.dds

Navin Patel's avatar

Navin Patel

Navin Patel 是 AMD 的高级技术部门成员,在图形和视频软件应用程序/工具及驱动程序的设计和开发方面拥有超过 15 年的经验。目前,他是 GPU Open Compressonator 工具的首席技术负责人。在加入 AMD 之前,他的专业经验还包括 LSI ASIC 的设计和开发、视频点播服务的完整系统集成以及工业自动化系统。

相关新闻和技术文章

相关视频

© . This site is unofficial and not affiliated with AMD.