NVIDIA 的 Tegra K1 (TK1) 是首款集成 CUDA 的 Arm 片上系統(tǒng) (SoC)。TK1 擁有 192 個(gè) Kepler GPU 內(nèi)核和 4 個(gè) Arm Cortex-A15 內(nèi)核,提供總計(jì) 327 GFLOPS 的計(jì)算性能,能夠使用 CUDA 處理大量數(shù)據(jù),同時(shí)通常消耗不到 6W 的功率(包括 SoC 和 DRAM)。這為低于 10W 域中的低 SWaP(尺寸、重量和功率)和小型 (SFF) 應(yīng)用程序帶來(lái)了改變游戲規(guī)則的性能,同時(shí)支持開(kāi)發(fā)人員友好的 Ubuntu Linux 軟件環(huán)境,提供更像這樣的體驗(yàn)臺(tái)式機(jī)而不是嵌入式 SoC。
Tegra K1 即插即用,可通過(guò)內(nèi)置 USB 3.0 和 PCIe gen2 x4/x1 端口傳輸高帶寬外圍設(shè)備、傳感器和網(wǎng)絡(luò)接口。TK1 適用于傳感器處理,并提供與 CUDA 異步的附加硬件加速功能,例如 H.264 編碼和解碼引擎以及雙 MIPI CSI-2 攝像頭接口和圖像服務(wù)處理器 (ISP)。TK1 有許多令人興奮的嵌入式應(yīng)用程序,它們利用其作為媒體處理器和低功耗平臺(tái)的自然能力來(lái)快速集成設(shè)備和傳感器。
由于 GPU 加速特別適合成像、信號(hào)處理、自治和機(jī)器學(xué)習(xí)等數(shù)據(jù)并行任務(wù),Tegra K1 將這些功能擴(kuò)展到 10W 以下的領(lǐng)域。現(xiàn)在,從 NVIDIA 的高端Tesla HPC 加速器以及GeForce和Quadro獨(dú)立 GPU 一直到低功耗 TK1,代碼可移植性得以保持。可用于 TK1的 CUDA 6工具包的完整版本,包括示例、數(shù)學(xué)庫(kù),例如cuFFT、cuBLAS和NPP,以及 NVIDIA 的 NVCC 編譯器。開(kāi)發(fā)人員可以在 TK1 上本地編譯 CUDA 代碼,也可以從 Linux 開(kāi)發(fā)機(jī)器進(jìn)行交叉編譯。CUDA 庫(kù)和開(kāi)發(fā)工具的可用性確保了在離散 GPU 和 Tegra 上部署 CUDA 應(yīng)用程序之間的無(wú)縫且輕松的可擴(kuò)展性。還有可用的OpenCV4Tegra以及 NVIDIA 的VisionWorks 工具包.此外,Ubuntu 14.04 存儲(chǔ)庫(kù)包含豐富的用于 Arm 架構(gòu)的預(yù)構(gòu)建包,可最大限度地減少跟蹤和構(gòu)建依賴項(xiàng)所花費(fèi)的時(shí)間。在許多情況下,只要源代碼可用并且沒(méi)有顯式調(diào)用 x86 特定指令(如 SSE、AVX 或 x86-ASM),只需稍加修改即可為 Arm 重新編譯應(yīng)用程序。NEON 是 Arm 針對(duì) Cortex-A 系列 CPU 的 SIMD 擴(kuò)展版本。
借助 NVIDIA 的Jetson TK1 devkit,每個(gè)人都可以使用 TK1。Jetson TK1 支持相同的桌面式用戶環(huán)境,被用作部署堅(jiān)固、擴(kuò)展溫度 SFF 模塊的嵌入式應(yīng)用程序的有效開(kāi)發(fā)平臺(tái)。通過(guò) PCIe x4 gen2,模塊可以與各種 I/O 夾層集成,為 Tegra 提供許多可能的接口。此外,還有用于流式聯(lián)網(wǎng)傳感器或互連多個(gè) Tegra 的本機(jī)板載千兆以太網(wǎng)。讓我們考慮一個(gè)案例研究,該案例研究突出了 TK1 輕松集成傳感器和支持高帶寬流媒體的能力。
案例研究#1:機(jī)器人/無(wú)人駕駛車(chē)輛平臺(tái)
嵌入式應(yīng)用程序通常需要視頻處理、數(shù)字信號(hào)處理 (DSP)、命令和控制等元素。在這個(gè)帶有 Tegra K1 的示例架構(gòu)中,我們使用 CUDA 處理來(lái)自高清 GigEVision 千兆位相機(jī)的圖像,并同時(shí)在 180° 光探測(cè)和測(cè)距 (LIDAR) 掃描測(cè)距儀上執(zhí)行世界地圖繪制和障礙物探測(cè)操作。此外,我們還集成了 GPS 接收器、慣性測(cè)量單元 (IMU)、電機(jī)控制器和其他傳感器等設(shè)備,以演示如何使用 TK1 對(duì)移動(dòng)平臺(tái)(如機(jī)器人或無(wú)人機(jī))進(jìn)行自主導(dǎo)航和運(yùn)動(dòng)控制。通過(guò)將 Tegra 的硬件加速 H.264 壓縮應(yīng)用于視頻和通過(guò) WiFi、3G/4G、或衛(wèi)星下行鏈路到遠(yuǎn)程地面站或其他聯(lián)網(wǎng)機(jī)器人。該架構(gòu)使用 TK1 作為系統(tǒng)的中央處理器和傳感器接口,為感知建模和無(wú)人駕駛提供了一個(gè)示例框架。
圖 2:使用 Tegra K1 實(shí)現(xiàn)的用于自主導(dǎo)航的傳感器處理管道。
我們使用的掃描激光雷達(dá)在 180 度范圍內(nèi)每 0.5° 產(chǎn)生一次距離樣本,這些樣本被分組為集群檢測(cè)到運(yùn)動(dòng)時(shí)使用均值偏移和跟蹤。CUDA 用于同時(shí)處理所有范圍樣本,并與從以前的地理參考 LIDAR 掃描構(gòu)建的八叉樹(shù)分區(qū) 3D 點(diǎn)云進(jìn)行變化檢測(cè),生成靜態(tài)和移動(dòng)障礙物列表,實(shí)時(shí)刷新以進(jìn)行碰撞檢測(cè)和避免。然后在 OpenGL 端渲染類(lèi)似雷達(dá)的平面位置指示器 (PPI)。這個(gè)特殊的激光雷達(dá)通過(guò) RS232 連接到 Jetson TK1 的串行端口;其他激光雷達(dá)也支持千兆以太網(wǎng)。我們使用開(kāi)源 SICK Toolbox 庫(kù)連接到傳感器,該庫(kù)在 TK1 上編譯并開(kāi)箱即用。輕松訪問(wèn) LIDAR 傳感器為 TK1 提供了亞毫米級(jí)精確讀數(shù),可利用 CUDA 進(jìn)行實(shí)時(shí) 3D 環(huán)境映射和并行路徑規(guī)劃。
圖 3:LIDAR 驅(qū)動(dòng)的 PPI 顯示器可視化平臺(tái)環(huán)境中的靜態(tài)和移動(dòng)障礙物。
在成像方面,Tegra K1 擁有多個(gè)接口用于流式傳輸高清視頻,例如 CSI-2、USB 3.0 和千兆以太網(wǎng)。適用于 HD-SDI、CameraLink、LVDS 等其他媒體的圖像采集卡可以通過(guò)其 PCIe gen2 x4 端口與 TK1 集成。在本案例研究中,我們使用來(lái)自 GigEVision 兼容供應(yīng)商的多臺(tái)千兆以太網(wǎng)攝像機(jī)進(jìn)行了測(cè)試,分辨率從 1920×1080 到 2448×2048 不等,發(fā)現(xiàn)每個(gè)千兆以太網(wǎng)端口都有一個(gè)單獨(dú)的 Arm CPU 內(nèi)核,足以處理網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)包使用套接字 API。使用 cudaMallocManaged()統(tǒng)一內(nèi)存CUDA 6 的新功能,視頻流由 CPU 解包到與 GPU 共享的緩沖區(qū)中,需要零副本才能將視頻“放入 GPU 內(nèi)存”(在 TK1 的情況下,它在物理上都是相同的內(nèi)存)。
使用 OpenCV、NVIDIA NPP 和 VisionWorks 等免費(fèi)提供的庫(kù),用戶可以在旅途中運(yùn)行無(wú)數(shù) CUDA 加速的視頻過(guò)濾器,包括光流、SLAM、立體視差、穩(wěn)健的特征提取和匹配、鑲嵌、和多個(gè)移動(dòng)目標(biāo)指示器(MMTI)。
可訓(xùn)練的行人和車(chē)輛檢測(cè)器可以使用可用的方向梯度直方圖(HoG) 實(shí)現(xiàn)在 TK1 上實(shí)時(shí)運(yùn)行。有許多現(xiàn)有的 CUDA 代碼可用,它們以前在離散 GPU 上運(yùn)行,現(xiàn)在可以部署在 Tegra 上。
除了激光雷達(dá)設(shè)備和攝像頭,TK1 還支持 GPS 和 IMU 等導(dǎo)航傳感器,以提高自主性。這些通常以 USB 或串行設(shè)備的形式提供,并且可以輕松地與 TK1 集成。制作支持 GPS 的應(yīng)用程序的一種快速方法是使用 libgps/gpsd,它為各種 NMEA 兼容設(shè)備提供通用軟件接口和 GPS 數(shù)據(jù)報(bào)。同時(shí)集成了 IMU 傳感器,以提供高達(dá) 100Hz 或更高刷新率的加速度計(jì)、陀螺儀和磁力計(jì)讀數(shù)。TK1 使用高質(zhì)量卡爾曼濾波融合快速 IMU 和 GPS 數(shù)據(jù),以提供 3 空間中的實(shí)時(shí)插值平臺(tái)位置,然后使用這些插值從光流中進(jìn)一步細(xì)化視覺(jué)里程計(jì)。雖然比遵守 NMEA 的 GPS 單元標(biāo)準(zhǔn)化程度低,IMU 設(shè)備通常附帶供應(yīng)商提供的 C/C++ 代碼,旨在與 libusb 鏈接,這是一個(gè)標(biāo)準(zhǔn)用戶空間驅(qū)動(dòng)程序接口,用于在 Linux 上訪問(wèn) USB 設(shè)備。此類(lèi)利用 libusb 的用戶空間驅(qū)動(dòng)程序無(wú)需付出任何努力即可從 x86 遷移到 Arm,并使開(kāi)發(fā)人員能夠快速將各種設(shè)備與 TK1 集成,例如用于驅(qū)動(dòng)伺服器和執(zhí)行器的 MOSFET 或 PWM 電機(jī)控制器、用于監(jiān)控電池壽命的電壓和電流傳感器、氣體/大氣傳感器、 ADC / DAC 等等,具體取決于手頭的應(yīng)用。Tegra K1 還具有六個(gè)用于驅(qū)動(dòng)離散信號(hào)的 GPIO 端口,可用于連接開(kāi)關(guān)、按鈕、繼電器和 LED。此類(lèi)利用 libusb 的用戶空間驅(qū)動(dòng)程序無(wú)需付出任何努力即可從 x86 遷移到 Arm,并使開(kāi)發(fā)人員能夠快速將各種設(shè)備與 TK1 集成,例如用于驅(qū)動(dòng)伺服器和執(zhí)行器的 MOSFET 或 PWM 電機(jī)控制器、用于監(jiān)控電池壽命的電壓和電流傳感器、氣體/大氣傳感器、 ADC / DAC 等等,具體取決于手頭的應(yīng)用。Tegra K1 還具有六個(gè)用于驅(qū)動(dòng)離散信號(hào)的 GPIO 端口,可用于連接開(kāi)關(guān)、按鈕、繼電器和 LED。此類(lèi)利用 libusb 的用戶空間驅(qū)動(dòng)程序無(wú)需付出任何努力即可從 x86 遷移到 Arm,并使開(kāi)發(fā)人員能夠快速將各種設(shè)備與 TK1 集成,例如用于驅(qū)動(dòng)伺服器和執(zhí)行器的 MOSFET 或 PWM 電機(jī)控制器、用于監(jiān)控電池壽命的電壓和電流傳感器、氣體/大氣傳感器、 ADC / DAC 等等,具體取決于手頭的應(yīng)用。Tegra K1 還具有六個(gè)用于驅(qū)動(dòng)離散信號(hào)的 GPIO 端口,可用于連接開(kāi)關(guān)、按鈕、繼電器和 LED。
本案例研究說(shuō)明了機(jī)器人、機(jī)器視覺(jué)、遙感等常見(jiàn)的感官和計(jì)算方面。TK1 提供了一個(gè)對(duì)開(kāi)發(fā)人員友好的環(huán)境,它消除了集成的繁瑣工作,使嵌入式 CUDA 應(yīng)用程序的部署變得容易,同時(shí)提供了卓越的性能。
案例研究 #2:平鋪 Tegra
某些應(yīng)用程序可能需要多個(gè) Tegras 協(xié)同工作才能滿足其要求。Tegra K1 SoC 集群可以平鋪并與 PCIe 或以太網(wǎng)互連。從實(shí)施這種平鋪架構(gòu)中獲得的尺寸、重量和功率優(yōu)勢(shì)是巨大的,并將 TK1 的適用性擴(kuò)展到數(shù)據(jù)中心和高性能計(jì)算 (HPC)。每塊板上平鋪 4、6、8 或更多 K1 SoC 的密集分布式拓?fù)涫强赡艿模⑻峁┯欣谇度胧綉?yīng)用程序和 HPC 等的可擴(kuò)展性。考慮這個(gè)基于現(xiàn)有嵌入式系統(tǒng)的示例,采用六個(gè) Tegra K1:
圖 5:SWaP 優(yōu)化的平鋪架構(gòu),六個(gè) Tegra K1 與非透明 PCIe 交換和 RDMA 互連。
六個(gè) TK1 通過(guò) PCIe gen2 x4 和一個(gè)具有非透明 (NT) 橋接和 DMA 卸載引擎的 32 通道 PCIe 交換機(jī)互連。這與輕量級(jí)用戶空間 RDMA 庫(kù)一起提供了 TK1 之間的低開(kāi)銷(xiāo)處理器間通信。同時(shí),傳感器接口由連接到每個(gè) Tegra 的 PCIe gen2 x1 端口的千兆以太網(wǎng) NIC/PHY 提供。PCIe 交換機(jī)還提供了一個(gè)備用 PCIe x8 擴(kuò)展,用于與用戶確定的 I/O 接口的高達(dá) 4GB/s 的板外連接。
像這樣的平鋪解決方案能夠在消耗不到 50W 的同時(shí)實(shí)現(xiàn)近 2 TFLOPS 的計(jì)算性能,并且與使用更高功率分立元件的架構(gòu)相比,低功耗集群 SoC 的效率有了很大提高。功率的降低使我們能夠在板上放置和布線所有組件,從而實(shí)現(xiàn)無(wú)連接器的相互通信并提高信號(hào)完整性和堅(jiān)固性。對(duì)于大數(shù)據(jù)分析、多通道視頻和信號(hào)處理以及機(jī)器學(xué)習(xí),具有 TK1 的分布式架構(gòu)為那些需要計(jì)算密度同時(shí)最小化 SWAP 的真正資源密集型應(yīng)用程序提供了顯著的性能提升。
不可能的高級(jí)
Tegra K1 突破性的計(jì)算性能由 NVIDIA 的低功耗優(yōu)化和集成 CUDA 的引入推動(dòng),引領(lǐng)新一代嵌入式設(shè)備和平臺(tái)利用 TK1 的 SWaP 密度來(lái)提供高級(jí)特性和功能。NVIDIA 和 GE 合作將由 TK1 驅(qū)動(dòng)的堅(jiān)固 SFF 模塊和系統(tǒng)帶入嵌入式領(lǐng)域。機(jī)器人、醫(yī)療和可穿戴設(shè)備、軟件無(wú)線電、安全、監(jiān)控等領(lǐng)域的應(yīng)用是使用 Tegra K1 進(jìn)行加速的主要候選者。更重要的是,TK1 的易用性促進(jìn)了可擴(kuò)展、可移植的嵌入式系統(tǒng),縮短了開(kāi)發(fā)周期,而現(xiàn)在在 Tegra 上運(yùn)行的大量現(xiàn)有 CUDA 庫(kù)和軟件進(jìn)一步促進(jìn)了這一點(diǎn)。您今天將使用 TK1 構(gòu)建什么?
關(guān)于作者
Dustin 是 NVIDIA Jetson 團(tuán)隊(duì)的一名開(kāi)發(fā)人員推廣員。Dustin 擁有機(jī)器人技術(shù)和嵌入式系統(tǒng)方面的背景,喜歡在社區(qū)中提供幫助并與 Jetson 合作開(kāi)展項(xiàng)目。您可以在NVIDIA 開(kāi)發(fā)者論壇或GitHub 上找到他。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19148瀏覽量
306179 -
機(jī)器人
+關(guān)注
關(guān)注
211文章
28524瀏覽量
207543 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5025瀏覽量
103266
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論