GPU Coder

为 NVIDIA GPU 生成 CUDA 代码

GPU Coder™ 可从 MATLAB® 代码和 Simulink® 模型生成优化的 CUDA® 代码。所生成的代码包含 CUDA 内核,针对深度学习、嵌入式视觉和信号处理算法的可并行化部分。为了提高性能,生成的代码会调用优化的 NVIDIA® CUDA 库,包括 TensorRT™、cuDNN、cuFFT、cuSolver 和 cuBLAS。您可以将这些代码作为源代码、静态库或动态库集成到您的项目,也可以针对桌面、服务器和嵌入到 NVIDIA Jetson™、NVIDIA DRIVE™ 及其他平台的 GPU 进行编译。您可以使用在 MATLAB 中生成的 CUDA 代码,对深度学习网络以及算法中的其他计算密集型部分进行加速。使用 GPU Coder,您可以将手写 CUDA 代码整合到您的 MATLAB 算法和生成的代码中。

您可以将 GPU Coder 与 Embedded Coder® 结合使用,以通过软件在环 (SIL) 测试和处理器在环 (PIL) 测试验证生成代码的数值行为。

开始:

生成快速、灵活的 CUDA 代码

生成优化的 CUDA 代码。免版权费部署代码。

免版权费部署算法

在主流 NVIDIA GPU 上编译和运行生成的代码,无论是桌面系统、数据中心还是嵌入式硬件皆可。生成的代码免版权费,您可将其免费部署到面向客户的商用应用。

深入了解图片库(2 张图像)

GPU Coder 成功案例

了解各行各业的工程师和科学家如何使用 GPU Coder 为应用生成 CUDA 代码。

空中客车在 NVIDIA Jetson TX2 上进行自动缺陷检测原型开发。

使用支持的工具箱和函数生成代码

GPU Coder 可使用多种 MATLAB 语言功能生成代码,设计工程师基于这些功能开发算法以用作大型系统组件。这包括来自 MATLAB 以及配套工具箱的数百个运算符和函数。

MATLAB 语言和工具箱支持代码生成。

整合既有代码

使用既有代码集成功能,将受信任的或高度优化的 CUDA 代码整合到您的 MATLAB 算法中,以在 MATLAB 中进行测试。然后,您就可以从生成的代码调用这些 CUDA 代码。

将现有 CUDA 代码整合到生成的代码中。

从 Simulink 模型生成 CUDA 代码

在 Simulink 中创建模型并生成优化的 CUDA 代码。

运行仿真并为 NVIDIA GPU 生成优化的代码

您可以将 GPU Coder 与 Simulink Coder™ 结合使用,以在 NVIDIA GPU 上加速 Simulink 模型中 MATLAB Function 模块的计算密集型部分。然后,您可以从 Simulink 模型生成优化的 CUDA 代码,并将其部署到您的 NVIDIA GPU 目标。

在 GPU 上运行的 Sobel 边缘检测器 Simulink 模型。

部署端到端深度学习算法

Deep Learning Toolbox™ 提供各种经过训练的深度学习网络,包括 ResNet-50、SegNet 和 LSTM,您可以在 Simulink 模型中使用这些网络,并将其部署到 NVIDIA GPU。除了经过训练的深度学习网络,您还可以同时为预处理和后处理生成代码,以部署完整的算法。

记录信号、调整参数并验证代码的数值行为

您可以将 GPU Coder 与 Simulink Coder 结合使用,以使用外部模式仿真实时记录信号和调整参数。将 GPU Coder 与 Embedded Coder 结合使用,则可以运行软件在环测试和处理器在环测试,这些测试可以验证生成代码的数值行为是否与仿真的行为一致。

在 Simulink 中使用外部模式记录信号和调整参数。

从深度学习网络生成 CUDA 代码

使用 Deep Learning Toolbox 部署经过训练的深度学习网络。

部署端到端深度学习算法

将 Deep Learning Toolbox 提供的各种经过训练的深度学习网络(包括 ResNet-50、SegNet 和 LSTM)部署到 NVIDIA GPU。您可以使用预定义的深度学习层,也可以针对特定应用自定义层。除了经过训练的深度学习网络,您还可以同时为预处理和后处理生成代码,以部署完整的算法。

针对推断生成优化代码

与其他深度学习解决方案相比,GPU Coder 生成的代码占用的内存较少,因为它仅生成您的算法运行推断所需的代码。生成的代码会调用优化的库,包括 TensorRT 和 cuDNN。

在使用 cuDNN 的 Titan V GPU 上通过 VGG-16 进行单图像推断。

使用 TensorRT 进一步优化

生成代码以实现 NVIDIA TensorRT 集成,这是一个高性能的深度学习推断优化器和运行时环境。相比标准 FP32 数据类型,使用 INT8 或 FP16 数据类型可实现进一步的性能提升。

综合运用 TensorRT 和 INT8 数据类型提高执行速度。

深度学习量化

量化您的深度学习网络,以减少内存使用并增强推断性能。使用深度网络量化器,对性能与推断准确性之间的权衡进行分析和可视化。

优化生成的代码

GPU Coder 可自动优化所生成的代码。使用设计模式进一步提升性能。

最大限度地减少 CPU-GPU 内存传输并优化内存使用

GPU Coder 可对 MATLAB 代码段进行自动分析、识别和分区,以分别在 CPU 或 GPU 上运行。它还最大程度地减少了 CPU 与 GPU 之间的数据副本量。使用性能分析工具确定其他潜在瓶颈。

性能分析报告识别出潜在的瓶颈。

调用优化库

使用 GPU Coder 生成的代码会调用优化的 NVIDIA CUDA 库,包括 TensorRT、cuDNN、cuSolver、cuFFT、cuBLAS 和 Thrust。从 MATLAB 工具箱函数生成的代码也会尽可能映射到优化库。

生成的代码,其中调用了优化的 cuFFT CUDA 库中的函数。

使用设计模式进一步加速

设计模式(如模板处理)使用共享内存来提高内存带宽。使用某些函数(如卷积)时,将自动应用设计模式。您还可以使用特定编译控制指令手动调用它们。

模板处理设计模式。

硬件原型

将算法自动转换为 CUDA 代码,以快速访问硬件。

在 NVIDIA Jetson 和 DRIVE 平台上开发原型

使用 GPU Coder Support Package for NVIDIA GPUs,自动将生成的代码交叉编译和部署到 NVIDIA Jetson 和 DRIVE 平台上。

在 NVIDIA Jetson 平台上开发原型。

通过 MATLAB 和生成的代码访问外设和传感器

通过 MATLAB 与 NVIDIA 目标进行远程通信,从网络摄像头和其他支持的外设获取数据,以便进行早期原型开发。将您的算法与外设接口代码一起部署到板卡,以便独立执行。

通过 MATLAB 和生成的代码访问外设和传感器。

从原型到生产

将 GPU Coder 与 Embedded Coder 结合使用,以交互方式在 MATLAB 代码与生成的 CUDA 代码之间进行追溯。通过软件在环 (SIL) 和处理器在环 (PIL) 测试,验证在硬件上运行的生成代码的数值行为。

结合使用 GPU Coder 和 Embedded Coder,生成交互式可追溯性报告。

加速算法

生成 CUDA 代码并进行编译以在 MATLAB 和 Simulink 内使用。

在 MATLAB 中使用 GPU 加速算法

在 MATLAB 代码中以 MEX 函数的形式调用生成的 CUDA 代码以加速执行,不过性能将因 MATLAB 代码本身的特性而异。对生成的 MEX 函数开展性能分析,以确定瓶颈并重点优化。

使用 NVIDIA GPU 加速 Simulink 仿真

您可以将 GPU Coder 与 Simulink Coder 结合使用,以在 NVIDIA GPU 上加速 Simulink 模型中 MATLAB Function 模块的计算密集型部分。

最新特性

Simulink 支持

生成、构建 Simulink 模型并部署到 NVIDIA GPU 之上

深度学习 Simulink 支持

生成、构建 Simulink 模型中的深度学习网络并部署到 NVIDIA GPU 之上

持久变量

在 GPU 上创建持久内存

Wavelet Toolbox 代码生成

使用 dwt、dwt2、modwt 和 modwtmra 为基于 FFT 的 FIR 滤波和短时傅里叶变换生成代码

深度学习

为自定义层生成代码

多输入网络

为具有多输入的网络生成代码

长短期记忆 (LSTM) 网络

为卷积 LSTM 和网络激活生成代码

用于 NVIDIA 硬件的 IO 模块库

使用 GPU Coder Support Package for NVIDIA GPUs 访问 NVIDIA 硬件外设

关于这些特性和相应函数的详细信息,请参阅发行说明