验证生成的代码的正确性
生成代码后,GPU编码器™提供多个选项检查源代码和测试生成的代码的正确性。
代码生成的报告提供了一个交互式界面检查生成的CUDA®源文件,生成的数据类型,和其他代码的见解。有关更多信息,请参见代码生成报告。
验证生成的墨西哥人在GPU编码器的应用功能。
验证生成的墨西哥人在命令行功能。
与MATLAB®编码器™金宝app支持NVIDIA包®杰森和NVIDIA驱动平台,您可以使用processor-in-the-loop(公益诉讼)执行检查的数值行为CUDA你从MATLAB函数生成的代码。有关更多信息,请参见Processor-In-The-Loop从命令行执行(MATLAB编码器支持包为金宝appNVIDIA杰森和NVIDIA驱动平台)和Processor-In-The-Loop GPU编码器应用程序执行(MATLAB编码器支持包为金宝appNVIDIA杰森和NVIDIA驱动平台)。
如果你有嵌入式编码器®,您可以验证的数值行为生成的CUDA代码通过使用software-in-the-loop (SIL)执行。
验证在墨西哥人功能GPU编码器应用程序
在GPU编码器应用程序,生成一个墨西哥人功能后,您可以确认它具有相同的功能与原始MATLAB入口点函数。提供一个测试文件,生成测试向量被测试函数,然后调用原来的MATLAB入口点函数。测试文件可以是一个MATLAB函数或脚本,但必须在同一文件夹与原始入口点函数。
在生成代码页面的GPU编码器应用,点击验证代码。
类型或选择测试文件。例如,
myfunction_test
。运行测试文件没有替换原始调用MATLAB函数调用墨西哥人功能,选择MATLAB代码为运行使用选择。点击运行生成的代码。
运行测试文件,替换原始调用MATLAB函数调用墨西哥人功能,选择生成的代码为运行使用选择。点击运行生成的代码。
比较的结果运行最初的MATLAB函数运行的结果生成的CUDA墨西哥人的功能。
验证墨西哥人在命令行功能
您可以验证生成的CUDA墨西哥人文件在命令行中使用coder.runTest
函数。的coder.runTest
函数运行测试文件替换原始调用MATLAB函数调用墨西哥人的功能。例如,测试myfunction
函数与myfunction_test
测试文件,在MATLAB命令窗口输入以下代码。
coder.runTest (“myfunction_test”,“myfunction”)
比较结果与最初的MATLAB函数运行的结果。如果错误发生在运行,调用堆栈信息用于调试。或者,您可以使用codegen
与以及
选择。
codegen myfunction以及'myfunction_test”
测试文件可以一个MATLAB函数,脚本,或基于类的单元测试。
代码验证通过Software-In-The-Loop
GPU编码器支持so金宝appftware-in-the-loop (SIL)执行,这使您能够验证源代码和目标代码编译。SIL)执行期间通过MATLAB SIL接口,软件编译和使用您提供的测试向量,运行库代码在开发计算机上。您可以重用测试向量为你开发的MATLAB函数来验证数值库代码的行为。
请注意
在微软®窗户®思科系统,Windows防火墙可以阻止执行。更改Windows防火墙设置允许访问。
当使用SIL执行,确保
基准测试
在GPU编码器设置选项假
。执行硅编译错误的基准测试结果。
SIL的执行GPU编码器应用程序
software-in-the-loop (SIL)执行仅支持静态和动态库输出类型。金宝app如果你生成一个墨西哥人功能,您必须更改要使用的项目设置静态库
或动态库
为构建类型和运行生成代码一次。
打开GPU编码器应用MATLAB将来发布应用程序选项卡,在代码生成,点击应用程序图标。
打开您的项目,点击,然后单击
打开现有的项目
。选择项目,myproject.prj
。在生成代码页面,点击生成箭头。在生成对话框:
集构建类型来
静态库
或动态库
。清除只生成代码复选框。
你可以把其他设置的默认值。
生成CUDA代码,点击生成。点击验证代码。
在命令字段中,指定测试文件(例如,
myfunction_test.m
),原始调用MATLAB函数(例如,myfunction
)。银执行开始,点击运行生成的代码。GPU编码器的应用:
生成一个独立的图书馆
codegen \ lib \ myfunction
。生成硅界面代码
myfunction codegen \ lib \ \硅
。运行测试文件,替换调用MATLAB函数库中调用生成的代码。
显示消息的SIL执行测试输出选项卡。
验证的结果SIL执行匹配结果从原来的MATLAB函数。
终止SIL执行过程,点击停止SIL确认。另外,在测试输出选项卡中,单击该链接
终止执行
。
SIL从命令行执行
设置和启动一个SIL从命令行执行,您将创建一个GPU编码器配置对象库代码生成,使config_obj。VerificationMode =“银”
,使用codegen
函数来生成库代码和SIL接口,和使用coder.runTest
函数来运行测试文件原来的MATLAB函数。以下是一个自动化的构建脚本执行SIL执行一系列命令。
% %为静态库创建配置对象。配置= coder.gpuConfig (“自由”);配置。GenerateReport = true;配置。VerificationMode =“银”;% %为入口点定义参数类型“mandelbrot_count”。ARGS =细胞(1,1);ARGS{1} =细胞(3,1);ARGS {1} {1} = coder.typeof (0);ARGS{1}{2} =编码器。typeof(0, 1000年[1000]);ARGS{1}{3} =编码器。typeof(0, 1000年[1000]);% %调用GPU编码器。codegen配置配置myfunctionarg游戏ARGS {1}% %运行测试文件与sil接口coder.runTest (“myfunction_test”,(“myfunction_sil”。mexext]);% %终止SIL)执行清晰的myfunction_sil;
数值CPU和GPU之间的区别
因为CPU和GPU之间的结构差异,数值验证并不总是匹配。这个场景是专门真当使用单
数据类型在MATLAB代码中积累和执行这些操作单
数据类型的值。然而,在某些情况下甚至像曼德布洛特的例子双
导致数值数据类型错误。不匹配的原因之一是,GPU浮点单位使用融合浮点Multiply-Add (FMAD)指令而CPU不使用这些指令。同样重要的是要注意,CUDA默认编译器执行这些指令级优化影响计算结果的准确性。例如,CUDA编译器保险丝浮点乘法和指令添加到一个指令。这个浮点Multiply-Add (FMAD)操作执行速度的两倍相比,两个单指令而导致的损失数值精度。您可以实现严格控制这些优化利用内在功能和编译器标志。设置编译器标志,明白了coder.gpuConfig
。集成CUDA intrinsic,看到调用自定义CUDA设备函数生成的代码。
另请参阅
应用程序
功能
对象
相关的话题
- 代码生成报告
- Processor-In-The-Loop从命令行执行(MATLAB编码器支持包为金宝appNVIDIA杰森和NVIDIA驱动平台)
- Processor-In-The-Loop GPU编码器应用程序执行(MATLAB编码器支持包为金宝appNVIDIA杰森和NVIDIA驱动平台)