在NVIDIA驅動PXAI車載電腦使OEM,一級供應商,初創公司和研究機構,加快自駕車系統的開發。用于DRIVE PX的NVIDIADriveWorks配套軟件開發工具包(SDK)包含許多針對自動駕駛應用的開源參考樣本,開發工具和庫模塊。
在正確配置開發環境之后,您可以自定義這些示例或在您的Linux主機上開發自己的應用程序,在主機或DRIVE PX上執行它們。圖1顯示了常見的編譯和執行流程。
圖1. DriveWorks應用程序的編譯和部署過程
我將向您展示如何配置NVIDIANsight EclipseEdition以啟用整個主機編譯和交叉編譯過程。Nsight Eclipse提供了一個由Eclipse平臺支持的全功能集成開發環境(IDE)。一體化集成環境允許您編輯,構建,調試和分析CUDA C / C ++應用程序。您將學習如何在主機上以及遠程DRIVE PX 2上導入,編譯,運行和調試DriveWorks項目。這直接從Nsight IDE內部進行,利用原始示例makefile。
預備步驟
Nsight Eclipse支持一套豐富的商業和免費插件,并附帶CUDA Toolkitfor Linux和Mac。我們假設您最近在主機上運行了NVIDIA DriveInstall。NVIDIA 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/driveworkssudocp-r樣本樣本-原始光盤樣本-原創sudomkdirbuild-主機cdbuild-主機sudocmake..sudomake-j
現在為您的DRIVE PX進行交叉編譯。查找主機中的DriveSDK文件夾并記下其完整路徑。在以下代碼片段中將DriveSDK路徑替換為“
sudomkdirbuild-targetcdbuild-targetsudocmake-DCMAKE_BUILD_TYPE=發布-DCMAKE_TOOLCHAIN_FILE=/usr/local/driveworks/samples-original/cmake/Toolchain-V4L。cmake-DVIBRANTE_PDK:STRING=/drive-t186ref-linux..sudomake-j
假設上述操作正常運行,請配置Nsight Eclipse使其自動運行。首先,復制主機上現有的DriveWorks源代碼文件夾。在主機終端窗口中,鍵入:
cd/usr/local/driveworkssudocp-r樣本樣本-nsight
保持距離只有這些文件夾中samples-nsight/src的文件夾:framework,dnn,drivenet。
插件修改
現在我們來運行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>”并按照提示完成安裝。
圖2.安裝Eclipse marketplace客戶端
現在讓我們安裝市場上的cmake4eclipse插件。在Nsight主菜單中,在Nsight主菜單中選擇“Help> Eclipse Marketplace ...”,然后在搜索窗口中輸入“cmake”。現在通過單擊“Install”安裝cmake4eclipse插件,如圖3所示。按照提示完成安裝。或者,您也可以安裝CMake Editor插件以及語法高亮顯示。
圖3.安裝cmake4eclipse插件
一旦你安裝了插件,創建一個新的CUDA C / C ++項目:“文件>新建> CUDA C / C ++項目”。將“DriveNet”寫為“項目名稱”,取消選中“使用默認位置”并瀏覽至“/ usr / local / driveworks / samples-nsight”。
選擇“空項目”作為“項目類型”,選擇“CUDA Toolkit 9.0”作為“工具鏈”。點擊“下一步”后,將剩余選項保留為默認值,如圖4所示。
圖4.創建一個新的CUDA C / C ++項目。
現在不要指定“目標系統”。您將為主機和目標創建兩種不同的配置。
主機環境配置
現在我們來完成設置主機環境配置的步驟:
-
右鍵單擊“DriveNet”并從Project Explorer窗口中選擇“Properties”。
-
現在進入“Build> CMake”標簽并點擊“管理配置...”。
-
在彈出的新窗口中輸入build-host作為“Name”,然后選擇“Release:CUDA Toolkit 9.0”作為“Default configuration”,為主機創建一個新的配置。
-
點擊“確定”和“設置活動”。
-
現在返回到“DriveNet的屬性”窗口并修改“文件夾”字段,使其僅包含“$ {ConfigName}”。
-
切換到“符號”選項卡,單擊“添加”按鈕,然后在“要定義的CMake緩存條目”字段中鍵入CMAKE_BUILD_TYPE作為“變量名稱”,STRING作為“類型”,并釋放為“值”。
-
點擊“確定”,然后點擊“應用”確認。
如果您有點困惑,請使用圖5作為參考。這會為主機創建一個發布類型配置。稍后,您將為目標創建一個調試類型配置。
圖5.主機的CMake選項卡的配置。
在左側的“工具鏈編輯器”選項卡中,選擇“Cmake Builder(GNU Make)”作為“當前構建器”(如圖6所示),以便在構建項目時使用cmake4eclipse插件在Nsight內。
圖6.工具鏈編輯器配置。
最后,進入“C / C ++常規>預處理器包含路徑,宏等”,找到“Providers”選項卡,選擇“CMAKE_EXPORT_COMPILE_COMMANDS Parser”行并通過點擊“上移”將其移動到列表頂部。 ,如圖7所示。包含路徑的預處理器現在將自動從CMake配置文件中導出。
圖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目標設備添加第二個環境的時候了。目標配置與您剛剛設置的主機類似,但需要更多設置。我們來看看這個過程:
-
再次在左列中選擇“DriveNet”項目,右鍵單擊并打開“屬性”窗口。
-
從“Build”標簽中選擇“CMake”,然后點擊“Manage Configurations ...”。
-
創建一個稱為“build-target”的新配置,并選擇“Debug:CUDA Toolkit 9.0”作為“Default configuration”。
-
由于我將演示如何在此示例上運行Nsight Eclipse調試器,因此我為此配置指定了“調試:CUDA Toolkit 9.0”。如果您對調試不感興趣,請選擇“發布:CUDA Toolkit 9.0”。
-
復制與圖6中顯示的主機配置相關的步驟,但是這次在“符號”選項卡中添加更多條目:
-
“變量名稱”:CMAKE_BUILD_TYPE,“類型”:“STRING”,“值”:調試
-
“變量名稱”:CMAKE_TOOLCHAIN_FILE,“類型”:“FILEPATH”,“值”:/usr/local/driveworks/samples-nsight/cmake/Toolchain-V4L.cmake
-
“變量名稱”:VIBRANTE_PDK,“類型”:“路徑”,“值”:
-
確保在主機的“DriveSDK”文件夾中將“
圖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。通過創建一個新文件夾并將其所有權設置給nvidiaDRIVE PX上的用戶來完成。
$sshnvidia@$cd/usr/local/driveworks$sudomkdirbin-nsight$sudochown-Rnvidia:nvidiabin-nsight$exit
回到Eclipse中,點擊“運行>運行配置”頂部菜單。在“C / C ++遠程應用程序”下面添加一個新配置,并將sample_drivenet_remote鍵入為“Name”。在“遠程連接”旁邊,選擇“管理”,并將<目標IP地址>作為“主機名稱”,nvidia作為“用戶名稱”,nvidia @ <目標IP地址>作為“標簽”,如圖9所示。然后點擊“完成”。
圖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
將
您現在可以恢復應用程序,該應用程序一直運行到CUDA內核中第一個斷點為止。從那里,您可以瀏覽左上窗格中的CPU和GPU調用堆棧,如圖11所示。在右上窗格中,您還可以檢查變量,寄存器和GPU內核執行配置(CUDA線程塊的數量和每個塊的線程數)。最后,反匯編視圖可以很容易地看到在執行代碼時如何更新寄存器值。
在GPU上的特定位內核代碼中設置一個斷點,通過雙擊代碼中相應的行號來消除它。(但請記住,單步執行一個線程會導致同一個warp中的其他線程也步進。)
當你完成調試時,點擊紅色的停止按鈕退出應用程序。
圖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所示。完成后,“屬性”選項卡將顯示您從此時間線中選擇的任何事件的詳細信息。這些事件也可以在下面的窗格的“詳細信息”選項卡中以文本形式查看。
圖12.使用Nsight分析器可以以直觀的方式深入分析CUDA內核。
檢查時間線視圖下方的分析選項卡以進一步分析性能。這使您可以通過在代碼上運行更高級的分析會話來輕松識別瓶頸
-
NVIDIA
+關注
關注
14文章
5069瀏覽量
103476 -
AI
+關注
關注
87文章
31402瀏覽量
269814 -
自動駕駛
+關注
關注
784文章
13915瀏覽量
166776
發布評論請先 登錄
相關推薦
評論