主要内容

验证生成的代码的正确性

生成代码后,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如果你生成一个墨西哥人功能,您必须更改要使用的项目设置静态库动态库构建类型和运行生成代码一次。

  1. 打开GPU编码器应用MATLAB将来发布应用程序选项卡,在代码生成,点击应用程序图标。

  2. 打开您的项目,点击,然后单击打开现有的项目。选择项目,myproject.prj。在生成代码页面,点击生成箭头

  3. 生成对话框:

    • 构建类型静态库动态库

    • 清除只生成代码复选框。

    • 你可以把其他设置的默认值。

  4. 生成CUDA代码,点击生成。点击验证代码

  5. 在命令字段中,指定测试文件(例如,myfunction_test.m),原始调用MATLAB函数(例如,myfunction)。

  6. 银执行开始,点击运行生成的代码。GPU编码器的应用:

    • 生成一个独立的图书馆codegen \ lib \ myfunction

    • 生成硅界面代码myfunction codegen \ lib \ \硅

    • 运行测试文件,替换调用MATLAB函数库中调用生成的代码。

    • 显示消息的SIL执行测试输出选项卡。

  7. 验证的结果SIL执行匹配结果从原来的MATLAB函数。

  8. 终止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设备函数生成的代码

另请参阅

应用程序

功能

对象

相关的话题