在NVIDIA驅(qū)動(dòng)PXAI車載電腦使OEM,一級(jí)供應(yīng)商,初創(chuàng)公司和研究機(jī)構(gòu),加快自駕車系統(tǒng)的開發(fā)。用于DRIVE PX的NVIDIADriveWorks配套軟件開發(fā)工具包(SDK)包含許多針對(duì)自動(dòng)駕駛應(yīng)用的開源參考樣本,開發(fā)工具和庫模塊。
在正確配置開發(fā)環(huán)境之后,您可以自定義這些示例或在您的Linux主機(jī)上開發(fā)自己的應(yīng)用程序,在主機(jī)或DRIVE PX上執(zhí)行它們。圖1顯示了常見的編譯和執(zhí)行流程。
圖1. DriveWorks應(yīng)用程序的編譯和部署過程
我將向您展示如何配置NVIDIANsight EclipseEdition以啟用整個(gè)主機(jī)編譯和交叉編譯過程。Nsight Eclipse提供了一個(gè)由Eclipse平臺(tái)支持的全功能集成開發(fā)環(huán)境(IDE)。一體化集成環(huán)境允許您編輯,構(gòu)建,調(diào)試和分析CUDA C / C ++應(yīng)用程序。您將學(xué)習(xí)如何在主機(jī)上以及遠(yuǎn)程DRIVE PX 2上導(dǎo)入,編譯,運(yùn)行和調(diào)試DriveWorks項(xiàng)目。這直接從Nsight IDE內(nèi)部進(jìn)行,利用原始示例makefile。
預(yù)備步驟
Nsight Eclipse支持一套豐富的商業(yè)和免費(fèi)插件,并附帶CUDA Toolkitfor Linux和Mac。我們假設(shè)您最近在主機(jī)上運(yùn)行了NVIDIA DriveInstall。NVIDIA DriveInstall會(huì)在主機(jī)和目標(biāo)系統(tǒng)上自動(dòng)安裝以下項(xiàng)目:
?NVIDIA DRIVE?SDK,
?CUDA工具包,
?cuDNN,
?DriveWorks,
?上述庫依賴項(xiàng)。
您應(yīng)首先制作原始DriveWorks示例文件夾的副本,以避免覆蓋原始源代碼。您只需要從DriveWorks導(dǎo)入DriveNet樣品;你將不需要其他樣品。
確保DriveNet示例在繼續(xù)之前正確運(yùn)行。通過在主機(jī)和DRIVE PX 2上的終端窗口中執(zhí)行以下代碼來執(zhí)行此操作。DriveWorks樣品的主機(jī)執(zhí)行和主機(jī)編譯只能在裝有NVIDIA GPU的x86 PC上運(yùn)行。在PC上編譯需要基于Maxwell的GPU,但建議使用基于Pascal的GPU(GeForce GTX 9xx)。您只能在PC上不使用Maxwell,Pascal或更高版本的NVIDIA GPU的情況下交叉編譯DRIVE PX 2的樣本。
cd/usr/local/driveworks/bin./sample_drivenet
此外,請(qǐng)確?!笆謩?dòng)”主機(jī)編譯和DRIVE PX 2交叉編譯成功運(yùn)行。在您的主機(jī)上,執(zhí)行以下操作:
cd/usr/local/driveworkssudocp-r樣本樣本-原始光盤樣本-原創(chuàng)sudomkdirbuild-主機(jī)cdbuild-主機(jī)sudocmake..sudomake-j
現(xiàn)在為您的DRIVE PX進(jìn)行交叉編譯。查找主機(jī)中的DriveSDK文件夾并記下其完整路徑。在以下代碼片段中將DriveSDK路徑替換為“
sudomkdirbuild-targetcdbuild-targetsudocmake-DCMAKE_BUILD_TYPE=發(fā)布-DCMAKE_TOOLCHAIN_FILE=/usr/local/driveworks/samples-original/cmake/Toolchain-V4L。cmake-DVIBRANTE_PDK:STRING=/drive-t186ref-linux..sudomake-j
假設(shè)上述操作正常運(yùn)行,請(qǐng)配置Nsight Eclipse使其自動(dòng)運(yùn)行。首先,復(fù)制主機(jī)上現(xiàn)有的DriveWorks源代碼文件夾。在主機(jī)終端窗口中,鍵入:
cd/usr/local/driveworkssudocp-r樣本樣本-nsight
保持距離只有這些文件夾中samples-nsight/src的文件夾:framework,dnn,drivenet。
插件修改
現(xiàn)在我們來運(yùn)行Nsight!由于示例工作目錄位于“/ usr”中,因此需要將Nsight Eclipse作為“根”打開。
sudo/usr/local/cuda/bin/nsight
在本教程中,您將使用“cmake4eclipse”插件,它將幫助您配置CMake構(gòu)建過程。該插件還從DriveWorks CMake配置文件中自動(dòng)派生包含。
從Nsight Eclipse主菜單中選擇“Help> Install New Software ...”,然后從“Work with”下拉列表中選擇“http://download.eclipse.org/releases/juno/”。在搜索字段中輸入“market”并點(diǎn)擊圖2所示的“Marketplace Client”。之后,選擇“Next>”并按照提示完成安裝。
圖2.安裝Eclipse marketplace客戶端
現(xiàn)在讓我們安裝市場上的cmake4eclipse插件。在Nsight主菜單中,在Nsight主菜單中選擇“Help> Eclipse Marketplace ...”,然后在搜索窗口中輸入“cmake”。現(xiàn)在通過單擊“Install”安裝cmake4eclipse插件,如圖3所示。按照提示完成安裝。或者,您也可以安裝CMake Editor插件以及語法高亮顯示。
圖3.安裝cmake4eclipse插件
一旦你安裝了插件,創(chuàng)建一個(gè)新的CUDA C / C ++項(xiàng)目:“文件>新建> CUDA C / C ++項(xiàng)目”。將“DriveNet”寫為“項(xiàng)目名稱”,取消選中“使用默認(rèn)位置”并瀏覽至“/ usr / local / driveworks / samples-nsight”。
選擇“空項(xiàng)目”作為“項(xiàng)目類型”,選擇“CUDA Toolkit 9.0”作為“工具鏈”。點(diǎn)擊“下一步”后,將剩余選項(xiàng)保留為默認(rèn)值,如圖4所示。
圖4.創(chuàng)建一個(gè)新的CUDA C / C ++項(xiàng)目。
現(xiàn)在不要指定“目標(biāo)系統(tǒng)”。您將為主機(jī)和目標(biāo)創(chuàng)建兩種不同的配置。
主機(jī)環(huán)境配置
現(xiàn)在我們來完成設(shè)置主機(jī)環(huán)境配置的步驟:
-
右鍵單擊“DriveNet”并從Project Explorer窗口中選擇“Properties”。
-
現(xiàn)在進(jìn)入“Build> CMake”標(biāo)簽并點(diǎn)擊“管理配置...”。
-
在彈出的新窗口中輸入build-host作為“Name”,然后選擇“Release:CUDA Toolkit 9.0”作為“Default configuration”,為主機(jī)創(chuàng)建一個(gè)新的配置。
-
點(diǎn)擊“確定”和“設(shè)置活動(dòng)”。
-
現(xiàn)在返回到“DriveNet的屬性”窗口并修改“文件夾”字段,使其僅包含“$ {ConfigName}”。
-
切換到“符號(hào)”選項(xiàng)卡,單擊“添加”按鈕,然后在“要定義的CMake緩存條目”字段中鍵入CMAKE_BUILD_TYPE作為“變量名稱”,STRING作為“類型”,并釋放為“值”。
-
點(diǎn)擊“確定”,然后點(diǎn)擊“應(yīng)用”確認(rèn)。
如果您有點(diǎn)困惑,請(qǐng)使用圖5作為參考。這會(huì)為主機(jī)創(chuàng)建一個(gè)發(fā)布類型配置。稍后,您將為目標(biāo)創(chuàng)建一個(gè)調(diào)試類型配置。
圖5.主機(jī)的CMake選項(xiàng)卡的配置。
在左側(cè)的“工具鏈編輯器”選項(xiàng)卡中,選擇“Cmake Builder(GNU Make)”作為“當(dāng)前構(gòu)建器”(如圖6所示),以便在構(gòu)建項(xiàng)目時(shí)使用cmake4eclipse插件在Nsight內(nèi)。
圖6.工具鏈編輯器配置。
最后,進(jìn)入“C / C ++常規(guī)>預(yù)處理器包含路徑,宏等”,找到“Providers”選項(xiàng)卡,選擇“CMAKE_EXPORT_COMPILE_COMMANDS Parser”行并通過點(diǎn)擊“上移”將其移動(dòng)到列表頂部。 ,如圖7所示。包含路徑的預(yù)處理器現(xiàn)在將自動(dòng)從CMake配置文件中導(dǎo)出。
圖7.預(yù)處理器包含路徑配置選項(xiàng)卡
點(diǎn)擊“應(yīng)用”,然后點(diǎn)擊“確定”確認(rèn)。編輯CMakeLists.txt文件以僅構(gòu)建DriveNet示例:替換該行
設(shè)置(SAMPLES框架;...
有:
設(shè)置(SAMPLES框架;dnn;drivenet)
您現(xiàn)在已準(zhǔn)備好構(gòu)建該項(xiàng)目。點(diǎn)擊“Build”,使用“Project> Build Project”命令。
DriveNet示例源文件可在“src> drivenet> drivenet> main.cpp”中找到?!?/span>sample_drivenet可執(zhí)行文件位于”build-host> src> drivenet> drivenet> sample_drivenet“中。右鍵單擊它并選擇“作為>本地C / C ++應(yīng)用程序運(yùn)行”以在主機(jī)上啟動(dòng)它。
目標(biāo)環(huán)境配置
現(xiàn)在是為應(yīng)用程序最終駐留的DRIVE PX 2目標(biāo)設(shè)備添加第二個(gè)環(huán)境的時(shí)候了。目標(biāo)配置與您剛剛設(shè)置的主機(jī)類似,但需要更多設(shè)置。我們來看看這個(gè)過程:
-
再次在左列中選擇“DriveNet”項(xiàng)目,右鍵單擊并打開“屬性”窗口。
-
從“Build”標(biāo)簽中選擇“CMake”,然后點(diǎn)擊“Manage Configurations ...”。
-
創(chuàng)建一個(gè)稱為“build-target”的新配置,并選擇“Debug:CUDA Toolkit 9.0”作為“Default configuration”。
-
由于我將演示如何在此示例上運(yùn)行Nsight Eclipse調(diào)試器,因此我為此配置指定了“調(diào)試:CUDA Toolkit 9.0”。如果您對(duì)調(diào)試不感興趣,請(qǐng)選擇“發(fā)布:CUDA Toolkit 9.0”。
-
復(fù)制與圖6中顯示的主機(jī)配置相關(guān)的步驟,但是這次在“符號(hào)”選項(xiàng)卡中添加更多條目:
-
“變量名稱”:CMAKE_BUILD_TYPE,“類型”:“STRING”,“值”:調(diào)試
-
“變量名稱”:CMAKE_TOOLCHAIN_FILE,“類型”:“FILEPATH”,“值”:/usr/local/driveworks/samples-nsight/cmake/Toolchain-V4L.cmake
-
“變量名稱”:VIBRANTE_PDK,“類型”:“路徑”,“值”:
-
確保在主機(jī)的“DriveSDK”文件夾中將“
圖8.目標(biāo)的CMake標(biāo)簽配置。
重復(fù)與“主機(jī)配置”相同的“工具鏈編輯器”(來自圖7)和“預(yù)處理器包含路徑,宏等”(如圖8),選擇“build-target [Active]”。點(diǎn)擊每個(gè)標(biāo)簽的“應(yīng)用”,然后點(diǎn)擊“確定”繼續(xù)。
您現(xiàn)在可以按照與構(gòu)建主機(jī)版本相同的步驟交叉編譯該項(xiàng)目。首先通過“Project> Build Configurations> Set Active”選擇“build-target”,然后使用“Project> Build Project”命令單擊“Build”來構(gòu)建項(xiàng)目。您將在“build-target> src> drivenet> drivenet”中找到可執(zhí)行文件。
從Nsight Eclipse運(yùn)行DRIVE PX上的示例
假設(shè)DRIVE PX駐留在本地網(wǎng)絡(luò)上,您可以將Nsight Eclipse配置為在Drive PX上遠(yuǎn)程執(zhí)行DriveNet示例。首先在DRIVE PX的終端窗口中輸入ifconfig,找到您的“<目標(biāo)IP地址>”。
配置Nsight Eclipse可在每次啟動(dòng)時(shí)自動(dòng)將更新的交叉編譯版本的樣本傳輸?shù)紻RIVE PX。通過創(chuàng)建一個(gè)新文件夾并將其所有權(quán)設(shè)置給nvidiaDRIVE PX上的用戶來完成。
$sshnvidia@$cd/usr/local/driveworks$sudomkdirbin-nsight$sudochown-Rnvidia:nvidiabin-nsight$exit
回到Eclipse中,點(diǎn)擊“運(yùn)行>運(yùn)行配置”頂部菜單。在“C / C ++遠(yuǎn)程應(yīng)用程序”下面添加一個(gè)新配置,并將sample_drivenet_remote鍵入為“Name”。在“遠(yuǎn)程連接”旁邊,選擇“管理”,并將<目標(biāo)IP地址>作為“主機(jī)名稱”,nvidia作為“用戶名稱”,nvidia @ <目標(biāo)IP地址>作為“標(biāo)簽”,如圖9所示。然后點(diǎn)擊“完成”。
圖9.指定到您的DRIVE PX的網(wǎng)絡(luò)連接。
在“遠(yuǎn)程工具包”旁邊,單擊“管理”,然后在下一部分中單擊“檢測(cè)”以識(shí)別工具包路徑:/usr/local/cuda-9.0/bin應(yīng)找到。如果不是,則需要在目標(biāo)上手動(dòng)選擇CUDA工具包路徑。
要完成配置,請(qǐng)選中“上載本地可執(zhí)行文件”并鍵入可執(zhí)行文件的完整遠(yuǎn)程路徑:它應(yīng)該是/ usr / local / driveworks / bin-nsight / sample_drivenet。這樣,在運(yùn)行之前,Nsight Eclipse會(huì)自動(dòng)將更新后的DriveNet樣本發(fā)送到目標(biāo)。
在“本地”選項(xiàng)卡中,確保選擇“DriveNet”項(xiàng)目,并選擇sample_drivenet使用“搜索項(xiàng)目...”按鈕運(yùn)行的C / C ++應(yīng)用程序。在“環(huán)境”選項(xiàng)卡中,單擊“新建”,然后鍵入DISPLAY作為“名稱”,并將0作為“值”?;蛘撸绻\(yùn)行示例,可以將CUDA_VISIBLE_DEVICES作為“名稱”添加,將1作為“值”在iGPU上而不是DRIVE PX上的dGPU上2.單擊“運(yùn)行”以在目標(biāo)上啟動(dòng)應(yīng)用程序。
在DRIVE PX上運(yùn)行的調(diào)試樣例2
您現(xiàn)在已經(jīng)為DRIVE PX 2指定了遠(yuǎn)程目標(biāo)系統(tǒng)配置。這使配置可用于在“運(yùn)行>調(diào)試配置”菜單中調(diào)試樣本。在繼續(xù)之前,花一些時(shí)間看看這個(gè)窗口中提供的許多調(diào)試功能。
默認(rèn)情況下,Nsight自動(dòng)從遠(yuǎn)程目標(biāo)下載調(diào)試過程的共享庫。然而,這大大增加了調(diào)試執(zhí)行時(shí)間。您應(yīng)該直接將Nsight Eclipse指向主機(jī)系統(tǒng)中已有的目標(biāo)庫。切換到“調(diào)試器>共享庫”選項(xiàng)卡,并取消選中“從遠(yuǎn)程目標(biāo)下載共享庫”。然后點(diǎn)擊“添加...:”添加以下路徑
-
在/ usr /本地/ driveworks /目標(biāo)/ aarch64 Linux的/ lib目錄
-
在/ usr /本地/ CUDA /目標(biāo)/ aarch64 Linux的/ lib目錄
-
/驅(qū)動(dòng)-t186ref-LINUX / targetfs / usr / lib中 -
/驅(qū)動(dòng)-t186ref-LINUX / targetfs / LIB / aarch64-Linux的GNU -
/驅(qū)動(dòng)-t186ref-LINUX / targetfs / usr / lib中/ aarch64-Linux的GNU
將
您現(xiàn)在可以恢復(fù)應(yīng)用程序,該應(yīng)用程序一直運(yùn)行到CUDA內(nèi)核中第一個(gè)斷點(diǎn)為止。從那里,您可以瀏覽左上窗格中的CPU和GPU調(diào)用堆棧,如圖11所示。在右上窗格中,您還可以檢查變量,寄存器和GPU內(nèi)核執(zhí)行配置(CUDA線程塊的數(shù)量和每個(gè)塊的線程數(shù))。最后,反匯編視圖可以很容易地看到在執(zhí)行代碼時(shí)如何更新寄存器值。
在GPU上的特定位內(nèi)核代碼中設(shè)置一個(gè)斷點(diǎn),通過雙擊代碼中相應(yīng)的行號(hào)來消除它。(但請(qǐng)記住,單步執(zhí)行一個(gè)線程會(huì)導(dǎo)致同一個(gè)warp中的其他線程也步進(jìn)。)
當(dāng)你完成調(diào)試時(shí),點(diǎn)擊紅色的停止按鈕退出應(yīng)用程序。
圖10.使用Nsight Eclipse Edition的遠(yuǎn)程CUDA調(diào)試
在DRIVE PX 2上進(jìn)行性能分析
現(xiàn)在您已經(jīng)對(duì)樣本進(jìn)行了調(diào)試,您可以在Nsight上運(yùn)行DRIVE PX 2時(shí)對(duì)應(yīng)用程序進(jìn)行配置。初始遠(yuǎn)程目標(biāo)系統(tǒng)配置再次可用于遠(yuǎn)程配置。但是,請(qǐng)記住在“Make Target”配置中將CMake構(gòu)建類型更改為Release。
如果未指定-DCMAKE_BUILD_TYPE變量,則“Release”將是默認(rèn)設(shè)置,如圖4所示。單擊“Run> Profile configurations”開始分析并選擇“C / C ++ Remote Application”列表下的正確元素。請(qǐng)記住在右側(cè)的“Profiler”選項(xiàng)卡中指定一個(gè)執(zhí)行超時(shí) - 例如60秒 - 這會(huì)在指定時(shí)間后自動(dòng)殺死應(yīng)用程序。
之后,點(diǎn)擊“配置文件”。Nsight剖析器透視圖應(yīng)自動(dòng)打開。等待Nsight運(yùn)行應(yīng)用程序以創(chuàng)建執(zhí)行時(shí)間線,包括在GPU上執(zhí)行的所有CUDA運(yùn)行時(shí)和內(nèi)核調(diào)用,如圖12所示。完成后,“屬性”選項(xiàng)卡將顯示您從此時(shí)間線中選擇的任何事件的詳細(xì)信息。這些事件也可以在下面的窗格的“詳細(xì)信息”選項(xiàng)卡中以文本形式查看。
圖12.使用Nsight分析器可以以直觀的方式深入分析CUDA內(nèi)核。
檢查時(shí)間線視圖下方的分析選項(xiàng)卡以進(jìn)一步分析性能。這使您可以通過在代碼上運(yùn)行更高級(jí)的分析會(huì)話來輕松識(shí)別瓶頸
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4793瀏覽量
102429 -
AI
+關(guān)注
關(guān)注
87文章
28877瀏覽量
266227 -
自動(dòng)駕駛
+關(guān)注
關(guān)注
781文章
13449瀏覽量
165264
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論