• 正文
    • jetson nano安裝cuda
    • 編譯opencv的cuda庫(kù)
    • 結(jié)語(yǔ)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

jetson中使用cuda

03/05 09:17
1284
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

昨天分享了 cuda在ubuntu的安裝和使用,今天在jetson nano上進(jìn)行測(cè)試驗(yàn)證使用cuda。在jetson nano上安裝使用cuda和ubuntu有所區(qū)別,所以寫(xiě)了這篇文章。

首先cuda使用上還是有cuda庫(kù)直接調(diào)用和opencv cuda庫(kù)調(diào)用,最后還有在jetson nano內(nèi)置的CUDA Samples。當(dāng)然我們也可以自己在網(wǎng)絡(luò)下載,這是官方鏈接:https://github.com/NVIDIA/cuda-samples

jetson nano安裝cuda

cuda在jetson nano的鏡像是默認(rèn)安裝了的,已安裝版本是:

CUDA10.2,CUDNNv8,tensorRT,opencv4.1.1,python2,python3,tensorflow2.3,所以我們可以直接使用,不過(guò)oepncv的cuda庫(kù)是沒(méi)有的,需要我們進(jìn)行安裝,不過(guò)安裝的方式和上一篇文章類似,不過(guò)是有些操作細(xì)節(jié)需要修改一下。

由于jetson nano上面已經(jīng)自帶了CUDA10.2,那么我們直接使用了哈。因?yàn)橐恍┢胀ㄑ菔綿emo上篇文章就介紹過(guò)了,所以本次就寫(xiě)了 cuda在ubuntu的安裝使用分享

簡(jiǎn)單信息查詢demo

#include?"cuda_runtime.h"
#include?"device_launch_parameters.h"
#include?<stdio.h>
#include?<iostream>

using?namespace?std;
int?main()
{
?int?deviceCount;
?cudaGetDeviceCount(&deviceCount);

?for?(int?i?=?0;?i?<?deviceCount;?i++)
?{
??cudaDeviceProp?devPro;
??cudaGetDeviceProperties(&devPro,?i);
??cout?<<?"使用GPU:"?<<?i?<<?endl;
??cout?<<?"設(shè)備全局內(nèi)存總量:"?<<?devPro.totalGlobalMem?<<?endl;
??cout?<<?"SM的數(shù)量:"?<<?devPro.multiProcessorCount?<<?endl;
??cout?<<?"每個(gè)線程塊的共享內(nèi)存大?。??<<?devPro.sharedMemPerBlock?/?1024<<?"KB"?<<?endl;
??cout?<<?"每個(gè)線程塊的最大線程數(shù):"?<<?devPro.maxThreadsPerBlock?<<?endl;
??cout?<<?"一個(gè)線程塊中可用的寄存器數(shù):"?<<?devPro.regsPerBlock?<<?endl;
??cout?<<?"每個(gè)EM的最大線程數(shù):"?<<?devPro.maxThreadsPerMultiProcessor?<<?endl;
??cout?<<?"每個(gè)EM的最大線束數(shù):"?<<?devPro.maxThreadsPerMultiProcessor?/?32<<?endl;
??cout?<<?"設(shè)備上多處理器的數(shù)量:"?<<?devPro.multiProcessorCount?<<?endl;
?}

?getchar();
????return?0;
}

執(zhí)行效果:

cuda sample庫(kù)驗(yàn)證

這是就是前言里面說(shuō)到的cuda的例子,大家可以寫(xiě)cuda的代碼時(shí)候,可以參考里面的范例。而在nano里面,JetPack系統(tǒng)將 CUDA 環(huán)境安裝在 /usr/local/cuda 下面。

有人可能發(fā)現(xiàn)在 /usr/local 下面有 cuda 目錄與 cuda-10.2 目錄,兩者的內(nèi)容完全一樣。事實(shí)上 cuda 這個(gè)目錄是cuda-10.2軟鏈接,實(shí)際的內(nèi)容指向 cuda-10.2 這個(gè)目錄。因?yàn)?JetPack 以后會(huì)更新 CUDA 版本,所有 cuda-10.2 可能會(huì)改變,于是就使用 cuda 軟連接來(lái)確保一致性。

接下來(lái)進(jìn)入 samples 目錄

cd /usr/local/cuda/samples/,里面有早已經(jīng)放置好的示例,但是都是沒(méi)有編譯的,當(dāng)然我們可以在samples目錄下直接使用sudo make -j4進(jìn)行編譯,但是實(shí)際上在我編譯發(fā)現(xiàn)在主目錄編譯太費(fèi)時(shí)間了,建議大家到各個(gè)子目錄進(jìn)行編譯,然后驗(yàn)證。

在每個(gè)目錄下面都有對(duì)應(yīng)的子Makefile文件,大家到子目錄make即可。例如:cd 5_Simulations/nbody/,(nbody 是粒子碰撞模擬,大家也可以到其他目錄驗(yàn)證測(cè)試,因?yàn)檫@個(gè) nbody 范例提供 GPU 與 CPU 的執(zhí)行,可以讓大家更清楚兩者之間的性能差距) 然后 sudo make -j4

ls -l 大家就可以看到綠色編譯好的可執(zhí)行文件,這個(gè)時(shí)候我們就可以 sudo ./nbody 進(jìn)行測(cè)試

這個(gè)范例默認(rèn)是在 GPU 上執(zhí)行,并且預(yù)設(shè)粒子數(shù)量為 1024 個(gè)??梢砸暣邦^部看到一些性能相關(guān)的信息,包括:模擬粒子數(shù)是1024個(gè)、渲染性能的幀率、指令性能BIPS(每秒百萬(wàn)次)、計(jì)算機(jī)性能GFLPOS(單精度狀態(tài))。此外在界面的左上角還有粒子大小、速度阻尼、軟化系數(shù)、時(shí)間步長(zhǎng)、集群規(guī)模、速度范圍。

sudo ./nbody GPU跑的示意圖

cpu執(zhí)行的話是需要設(shè)置額外的參數(shù) sudo ./nbody -cpu -numbodies=1024

CPU跑的示意圖

將視窗頭部的性能數(shù)據(jù)與前一個(gè)在 GPU 上執(zhí)行的結(jié)果進(jìn)行比較,可以幾項(xiàng)性能都有10倍左右的差距,這效果就非常顯而易見(jiàn)了。這就是GPU使用的明顯對(duì)比了哈。

編譯opencv的cuda庫(kù)

這個(gè)和上一篇文件類似,也是要一些特殊的cmake選項(xiàng),我執(zhí)行編譯的選項(xiàng)如下,大家把opencv_contrib-4.1.1替換成自己的目錄即可。

cmake?-D?CMAKE_BUILD_TYPE=Release
??-D?ENABLE_CXX11=ON
??????????-D?CMAKE_INSTALL_PREFIX=/usr/local
??????????-D?WITH_CUDA=ON
???????????-D?CUDA_ARCH_BIN=${cuda_compute}
???????????-D?CUDA_ARCH_PTX=""
???????????-D?ENABLE_FAST_MATH=ON
???????????-D?CUDA_FAST_MATH=ON
???????????-D?WITH_CUBLAS=ON
????????????-D?WITH_LIBV4L=ON
????????????-D?WITH_GSTREAMER=ON
?????????????-D?WITH_GSTREAMER_0_10=OFF
?????????????-D?WITH_OPENGL=ON
?????????????-D?CUDA_NVCC_FLAGS="--expt-relaxed-constexpr"?
?????????????-D?CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2
?????????????-D?WITH_TBB=ON
?????????????-D?OPENCV_EXTRA_MODULES_PATH=/home/jetson/lyn_work/opencv_contrib-4.1.1/modules??????????../

不過(guò)這里我進(jìn)行了先在我的ubuntu系統(tǒng)進(jìn)行cmake 和make執(zhí)行,把opencv-4.1.1和opencv_contrib-4.1.1兩個(gè)文件夾打包拷貝到我的jetson nano編譯。為什么這么做呢,因?yàn)橛龅搅艘恍┚幾g錯(cuò)誤,如下:

[?98%]?Linking?CXX?executable?../../bin/opencv_perf_xphoto
In?file?included?from?/home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core.hpp:54:0,
???????????????from?/home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core/cuda.hpp:51,
???????????????from?/home/jetson/lyn_work/opencv_contrib-4.1.1/modules/cudaoptflow/include/opencv2/cudaoptflow.hpp:50,
???????????????from?/home/jetson/lyn_work/opencv-4.1.1/build/modules/cudaoptflow/precomp.hpp:48:
/home/jetson/lyn_work/opencv-4.1.1/modules/core/include/opencv2/core/base.hpp:320:40:?error:?expected?constructor,?destructor,?or?type?conversion?before?‘(’?token
#define?CV_Error(?code,?msg?)?cv::error(?code,?msg,?CV_Func,?__FILE__,?__LINE__?)

網(wǎng)上也有一些相似問(wèn)題,不過(guò)經(jīng)過(guò)自己對(duì)比log之后,發(fā)現(xiàn)是jetson上面網(wǎng)絡(luò)不好,在編譯opencv中,下載一些包,網(wǎng)絡(luò)不太通暢,導(dǎo)致下載失敗,最終導(dǎo)致的編譯error。所以我在自己ubuntu系統(tǒng)(有梯子)下載好之后再進(jìn)行編譯。

-- data: Download: face_landmark_model.dat

在拷貝到j(luò)etson nano之后,解壓兩個(gè)文件夾,在opencv的build目錄刪除掉 cmake的緩存文件,rm CMakeCache.txt ,重新cmake ,這個(gè)時(shí)候重新編譯就不需要重新下載依賴的包了。

編譯完之后,我們就可以使用,測(cè)試方法還是和上一篇文章類似,這里我就不多贅述了,大家可以參考上一篇的內(nèi)容。cuda在ubuntu的安裝使用分享

結(jié)語(yǔ)

這就是我自己的一些cuda在jetson nano的使用分享,下一篇我們聊聊cuda實(shí)際使用gpu加速和cpu使用的對(duì)比,以及它兩使用場(chǎng)景分析。。如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。


作者:良知猶存,白天努力工作,晚上原創(chuàng)公號(hào)號(hào)主。公眾號(hào)內(nèi)容除了技術(shù)還有些人生感悟,一個(gè)認(rèn)真輸出內(nèi)容的職場(chǎng)老司機(jī),也是一個(gè)技術(shù)之外豐富生活的人,攝影、音樂(lè) and 籃球。關(guān)注我,與我一起同行。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

一個(gè)程序員,喜歡寫(xiě)文章,還喜歡打籃球,也喜歡吉他鋼琴的駁雜之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),公眾號(hào)內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!