使用NVIDIA Nsight Eclipse Edition的DRIVE PX应用程序开发

描述

NVIDIA 驱动 PX  AI车载电脑使OEM,一级供应商,初创公司和研究机构,加快自驾车系统的开发。 用于DRIVE PX NVIDIA  DriveWorks配套软件开发工具包(SDK)包含许多针对自动驾驶应用的开源参考样本,开发工具和库模块。 

在正确配置开发环境之后,您可以自定义这些示例或在您的Linux主机上开发自己的应用程序,在主机或DRIVE PX上执行它们。图1显示了常见的编译和执行流程。

AI图1. DriveWorks应用程序的编译和部署过程

我将向您展示如何配置NVIDIA Nsight Eclipse  Edition  以启用整个主机编译和交叉编译过程。Nsight Eclipse提供了一个由Eclipse平台支持的全功能集成开发环境(IDE)。一体化集成环境允许您编辑,构建,调试和分析CUDA C / C ++应用程序。您将学习如何在主机上以及远程DRIVE PX 2上导入,编译,运行和调试DriveWorks项目。这直接从Nsight IDE内部进行,利用原始示例makefile。

预备步骤

Nsight Eclipse支持一套丰富的商业和免费插件,并附带CUDA Toolkit  for Linux和Mac。我们假设您最近在 主机上运行了NVIDIA DriveInstallNVIDIA DriveInstall会在主机和目标系统上自动安装以下项目:

•NVIDIA DRIVE™SDK,
•CUDA工具包,
•cuDNN,
•DriveWorks,
•上述库依赖项。

您应首先制作原始DriveWorks示例文件夹的副本,以避免覆盖原始源代码。您只需要从DriveWorks导入DriveNet样品; 你将不需要其他样品。

确保DriveNet示例在继续之前正确运行。通过在主机和DRIVE PX 2上的终端窗口中执行以下代码来执行此操作。DriveWorks样品的主机执行和主机编译只能在装有NVIDIA GPU的x86 PC上运行。在PC上编译需要基于Maxwell的GPU,但建议使用基于Pascal的GPU(GeForce GTX 9xx)。您只能在PC上不使用Maxwell,Pascal或更高版本的NVIDIA GPU的情况下交叉编译DRIVE PX 2的样本。

cd / usr / local / driveworks / bin ./ sample_drivenet

此外,请确保“手动”主机编译和DRIVE PX 2交叉编译成功运行。在您的主机上,执行以下操作:

cd / usr / local / driveworkssudo cp - r样本样本- 原始光盘样本- 原创sudo mkdir build - 主机cd build - 主机sudo cmake .. sudo make - j

现在为您的DRIVE PX进行交叉编译。查找主机中的DriveSDK文件夹并记下其完整路径。在以下代码片段中将DriveSDK路径替换为“”。

sudo mkdir build - targetcd build - target        sudo cmake - DCMAKE_BUILD_TYPE = 发布- DCMAKE_TOOLCHAIN_FILE = / usr / local / driveworks / samples - original / cmake / Toolchain - V4L 。cmake - DVIBRANTE_PDK :STRING = / drive - t186ref - linux ..  sudo make - j

假设上述操作正常运行,请配置Nsight Eclipse使其自动运行。首先,复制主机上现有的DriveWorks源代码文件夹。在主机终端窗口中,键入:

cd / usr / local / driveworkssudo cp - r样本样本- nsight

保持距离只有这些文件夹中samples-nsight/src的文件夹:frameworkdnndrivenet

插件修改

现在我们来运行Nsight!由于示例工作目录位于“/ usr”中,因此需要将Nsight Eclipse作为“根”打开。

sudo / usr / local / cuda / bin / nsight

在本教程中,您将使用“cmake4eclipse”插件,它将帮助您配置CMake构建过程。该插件还从DriveWorks CMake配置文件中自动派生包含。

从Nsight Eclipse主菜单中选择“Help> Install New Software ...”,然后从“Work with”下拉列表中选择“ http://download.eclipse.org/releases/juno/ ”。在搜索字段中输入“market”并点击图2所示的“Marketplace Client”。之后,选择“Next>”并按照提示完成安装。

AI图2.安装Eclipse marketplace客户端

现在让我们安装市场上的cmake4eclipse插件。在Nsight主菜单中,在Nsight主菜单中选择“Help> Eclipse Marketplace ...”,然后在搜索窗口中输入“cmake”。现在通过单击“Install”安装cmake4eclipse插件,如图3所示。按照提示完成安装。或者,您也可以安装CMake Editor插件以及语法高亮显示。

AI图3.安装cmake4eclipse插件

一旦你安装了插件,创建一个新的CUDA C / C ++项目:“文件>新建> CUDA C / C ++项目”。将“DriveNet”写为“项目名称”,取消选中“使用默认位置”并浏览至“/ usr / local / driveworks / samples-nsight”。

选择“空项目”作为“项目类型”,选择“CUDA Toolkit 9.0”作为“工具链”。点击“下一步”后,将剩余选项保留为默认值,如图4所示。

AI图4.创建一个新的CUDA C / C ++项目。

现在不要指定“目标系统”。您将为主机和目标创建两种不同的配置。

主机环境配置

现在我们来完成设置主机环境配置的步骤:

  1. 右键单击“DriveNet”并从Project Explorer窗口中选择“Properties”。

  2. 现在进入“Build> CMake”标签并点击“管理配置...”。

  3. 在弹出的新窗口中输入build-host作为“Name”,然后选择“Release:CUDA Toolkit 9.0”作为“Default configuration”,为主机创建一个新的配置。

  4. 点击“确定”和“设置活动”。

  5. 现在返回到“DriveNet的属性”窗口并修改“文件夹”字段,使其仅包含“$ {ConfigName}”。

  6. 切换到“符号”选项卡,单击“添加”按钮,然后在“要定义的CMake缓存条目”字段中键入CMAKE_BUILD_TYPE作为“变量名称”,STRING作为“类型”,并释放为“值”。

  7. 点击“确定”,然后点击“应用”确认。

如果您有点困惑,请使用图5作为参考。这会为主机创建一个发布类型配置。稍后,您将为目标创建一个调试类型配置。

AI图5.主机的CMake选项卡的配置。

在左侧的“工具链编辑器”选项卡中,选择“Cmake Builder(GNU Make)”作为“当前构建器”(如图6所示),以便在构建项目时使用cmake4eclipse插件在Nsight内。

AI图6.工具链编辑器配置。

最后,进入“C / C ++常规>预处理器包含路径,宏等”,找到“Providers”选项卡,选择“CMAKE_EXPORT_COMPILE_COMMANDS Parser”行并通过点击“上移”将其移动到列表顶部。 ,如图7所示。包含路径的预处理器现在将自动从CMake配置文件中导出。

AI图7.预处理器包含路径配置选项卡

点击“应用”,然后点击“确定”确认。编辑CMakeLists.txt文件以仅构建DriveNet示例:替换该行

设置(SAMPLES框架; ...

有:

设置(SAMPLES框架; dnn ; drivenet )

您现在已准备好构建该项目。点击“Build”,使用“Project> Build Project”命令。

DriveNet示例源文件可在“src> drivenet> drivenet> main.cpp”中找到。“ sample_drivenet可执行文件位于”build-host> src> drivenet> drivenet> sample_drivenet“中。右键单击它并选择“作为>本地C / C ++应用程序运行”以在主机上启动它。

目标环境配置

现在是为应用程序最终驻留的DRIVE PX 2目标设备添加第二个环境的时候了。目标配置与您刚刚设置的主机类似,但需要更多设置。我们来看看这个过程:

  1. 再次在左列中选择“DriveNet”项目,右键单击并打开“属性”窗口。

  2. 从“Build”标签中选择“CMake”,然后点击“Manage Configurations ...”。

  3. 创建一个称为“build-target”的新配置,并选择“Debug:CUDA Toolkit 9.0”作为“Default configuration”。

  4. 由于我将演示如何在此示例上运行Nsight Eclipse调试器,因此我为此配置指定了“调试:CUDA Toolkit 9.0”。如果您对调试不感兴趣,请选择“发布:CUDA Toolkit 9.0”。

  5. 复制与图6中显示的主机配置相关的步骤,但是这次在“符号”选项卡中添加更多条目:

    1. “变量名称”:CMAKE_BUILD_TYPE,“类型”:“STRING”,“值”:调试

    2.  “变量名称”:CMAKE_TOOLCHAIN_FILE,“类型”:“FILEPATH”,“值”:/usr/local/driveworks/samples-nsight/cmake/Toolchain-V4L.cmake

    3.  “变量名称”:VIBRANTE_PDK,“类型”:“路径”,“值”:

确保在主机的“DriveSDK”文件夹中将“”替换为“drive-t186ref-linux”的路径。检查图8以确保您正确完成了该步骤。

AI图8.目标的CMake标签配置。

重复与“主机配置”相同的“工具链编辑器”(来自图7)和“预处理器包含路径,宏等”(如图8),选择“build-target [Active]”点击每个标签的“应用”,然后点击“确定”继续。

您现在可以按照与构建主机版本相同的步骤交叉编译该项目。首先通过“Project> Build Configurations> Set Active”选择“build-target”,然后使用“Project> Build Project”命令单击“Build”来构建项目。您将在“build-target> src> drivenet> drivenet”中找到可执行文件。

从Nsight Eclipse运行DRIVE PX上的示例

假设DRIVE PX驻留在本地网络上,您可以将Nsight Eclipse配置为在Drive PX上远程执行DriveNet示例。首先在DRIVE PX的终端窗口中输入ifconfig,找到您的“<目标IP地址>”。

配置Nsight Eclipse可在每次启动时自动将更新的交叉编译版本的样本传输到DRIVE PX。通过创建一个新文件夹并将其所有权设置给nvidia DRIVE PX上的用户来完成。

$ ssh nvidia @$ cd / usr / local / driveworks$ sudo mkdir bin - nsight$ sudo chown - R nvidia :nvidia bin - nsight$ exit

回到Eclipse中,点击“运行>运行配置”顶部菜单。在“C / C ++远程应用程序”下面添加一个新配置,并将sample_drivenet_remote键入为“Name”。在“远程连接”旁边,选择“管理”,并将<目标IP地址>作为“主机名称”,nvidia作为“用户名称”,nvidia @ <目标IP地址>作为“标签”,如图9所示。然后点击“完成”。

AI图9.指定到您的DRIVE PX的网络连接。

在“远程工具包”旁边,单击“管理”,然后在下一部分中单击“检测”以识别工具包路径:/usr/local/cuda-9.0/bin 应找到。如果不是,则需要在目标上手动选择CUDA工具包路径。

要完成配置,请选中“上载本地可执行文件”并键入可执行文件的完整远程路径:它应该是/ usr / local / driveworks / bin-nsight / sample_drivenet。这样,在运行之前,Nsight Eclipse会自动将更新后的DriveNet样本发送到目标。

在“本地”选项卡中,确保选择“DriveNet”项目,并选择sample_drivenet 使用“搜索项目...”按钮运行的C / C ++应用程序。在“环境”选项卡中,单击“新建”,然后键入DISPLAY作为“名称”,并将0作为“值”。或者,如果要运行示例,可以将CUDA_VISIBLE_DEVICES作为“名称”添加,将1作为“值”在iGPU上而不是DRIVE PX上的dGPU上2.单击“运行”以在目标上启动应用程序。

在DRIVE PX上运行的调试样例2

您现在已经为DRIVE PX 2指定了远程目标系统配置。这使配置可用于在“运行>调试配置”菜单中调试样本。在继续之前,花一些时间看看这个窗口中提供的许多调试功能。

默认情况下,Nsight自动从远程目标下载调试过程的共享库。然而,这大大增加了调试执行时间。您应该直接将Nsight Eclipse指向主机系统中已有的目标库。切换到“调试器>共享库”选项卡,并取消选中“从远程目标下载共享库”。然后点击“添加...:”添加以下路径

  • 在/ usr /本地/ driveworks /目标/ aarch64 Linux的/ lib目录

  • 在/ usr /本地/ CUDA /目标/ aarch64 Linux的/ lib目录

  • /驱动-t186ref-LINUX / targetfs / usr / lib中

  • /驱动-t186ref-LINUX / targetfs / LIB / aarch64-Linux的GNU

  • /驱动-t186ref-LINUX / targetfs / usr / lib中/ aarch64-Linux的GNU

替换为主机上Drive Drive的路径,然后从该窗口启动调试器。这将Nsight切换到调试器的角度,并在代码中的第一条CPU指令处中断。在右上窗格中找到CUDA视图(多维数据集图标),然后选择“中断应用程序内核启动”。这会导致调试器在GPU上启动的任何CUDA内核上自动中断。

您现在可以恢复应用程序,该应用程序一直运行到CUDA内核中第一个断点为止。从那里,您可以浏览左上窗格中的CPU和GPU调用堆栈,如图11所示。在右上窗格中,您还可以检查变量,寄存器和GPU内核执行配置(CUDA线程块的数量和每个块的线程数)。最后,反汇编视图可以很容易地看到在执行代码时如何更新寄存器值。

在GPU上的特定位内核代码中设置一个断点,通过双击代码中相应的行号来消除它。 (但请记住,单步执行一个线程会导致同一个warp中的其他线程 也步进。)

当你完成调试时,点击红色的停止按钮退出应用程序。

AI图10.使用Nsight Eclipse Edition的远程CUDA调试

在DRIVE PX 2上进行性能分析

现在您已经对样本进行了调试,您可以在Nsight上运行DRIVE PX 2时对应用程序进行配置。初始远程目标系统配置再次可用于远程配置。但是,请记住在“Make Target”配置中将CMake构建类型更改为Release。

如果未指定-DCMAKE_BUILD_TYPE变量,则“Release”将是默认设置,如图4所示。单击“Run> Profile configurations”开始分析并选择“C / C ++ Remote Application”列表下的正确元素。请记住在右侧的“Profiler”选项卡中指定一个执行超时 - 例如60秒 - 这会在指定时间后自动杀死应用程序。

之后,点击“配置文件”。Nsight剖析器透视图应自动打开。等待Nsight运行应用程序以创建执行时间线,包括在GPU上执行的所有CUDA运行时和内核调用,如图12所示。完成后,“属性”选项卡将显示您从此时间线中选择的任何事件的详细信息。这些事件也可以在下面的窗格的“详细信息”选项卡中以文本形式查看。

AI图12.使用Nsight分析器可以以直观的方式深入分析CUDA内核。

检查时间线视图下方的分析选项卡以进一步分析性能。这使您可以通过在代码上运行更高级的分析会话来轻松识别瓶颈

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分