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