当您构建使用生成的CUDA的应用程序时®c++代码,你必须提供一个CUDA c++主函数来调用生成的代码。默认情况下,对于源代码、静态库、动态库和可执行文件的代码生成,使用codegen
命令,GPU编码器™生成示例CUDA c++主文件(main.cu
源文件和main.h
文件中的头文件例子
构建文件夹的子文件夹)。这个示例主文件是一个模板,可以帮助您将生成的CUDA代码合并到应用程序中。示例main函数声明和初始化数据,包括动态分配的数据。它调用入口点函数,但不使用入口点函数返回的值。
在为深度卷积神经网络(CNN)生成代码时,代码生成器利用了NVIDIA®cuDNN, TensorRT用于NVIDIA gpu或ARM®ARM马里图形处理器的计算库。这些库对保存图像、视频和任何其他数据的输入张量有特定的数据布局要求。在编写用于构建应用程序的自定义主函数时,必须创建输入缓冲区,以这些库所期望的格式向生成的入口点函数提供数据。
对于深度卷积神经网络(CNN),使用一个4-D张量描述符来定义具有以下字母的批量2-D图像的格式:
N
-批量大小
C
功能地图的数量(通道的数量)
H
——高度
W
——宽度
显示了最常用的4-D张量格式,其中字母按步长递减顺序排序。
NCHW
NHWC
CHWN
其中,GPU编码器使用NCHW
格式(默认为列-主布局)。要使用行主布局,请传递-rowmajor
可以选择的codegen
命令。或者,通过修改cfg。RowMajor
参数在代码生成配置对象中。
例如,考虑一组具有以下维度的图像:N = 1
,C = 3
,H = 5
,W = 4
.如果图像像素元素由一个整数序列表示,则输入图像可表示为:
当在主函数中创建输入缓冲区时,4-D图像被放置在存储器中NCHW
格式为:
从第一通道开始(C = 0
),这些元素按行长顺序连续排列。
继续使用第二个和以后的通道,直到所有通道的元素都被布置出来。
继续下一批(如果N > 1
).
长短期记忆网络(LSTM)是一种递归神经网络(RNN),它可以学习序列数据时间步长之间的长期依赖关系。对于LSTM,数据布局格式可以用以下字母表示:
N
-批量大小
年代
-序列长度(时间步长)
d
-一个输入序列的单元数
对于LSTM, GPU编码器使用SNd
默认格式。
coder.gpuConfig
|编码器。CodeConfig
|编码器。EmbeddedCodeConfig
|coder.gpuEnvConfig
|编码器。CuDNNConfig
|编码器。TensorRTConfig