成熟且完善的平臺生態是GPU廠商的護城河。相較于持續迭代的微架構帶來的技術壁壘硬實力,成熟的軟件生態形成的強大用戶粘性將在長時間內塑造GPU廠商的軟實力。以英偉達CUDA為例的軟硬件設計架構提供了硬件的直接訪問接口,不必依賴圖形API映射,降低GPGPU開發者編譯難度,以此實現高粘性的開發者生態。目前主流的開發平臺還包括AMD ROCm以及OpenCL。
CUDA(Compute Unified Device Architectecture),是NVIDIA于2006年推出的通用并行計算架構,包含CUDA指令集架構(ISA)和GPU內部的并行計算引擎。該架構允許開發者使用高級編程語言(例如C語言)利用GPU硬件的并行計算能力并對計算任務進行分配和管理,CUDA提供了一種比CPU更有效的解決大規模數據計算問題的方案,在深度學習訓練和推理領域被廣泛使用。
CUDA除了是并行計算架構外,還是CPU和GPU協調工作的通用語言。在CUDA編程模型中,主要有Host(主機)和Device(設備)兩個概念,Host包含CPU和主機內存,Device包含GPU和顯存,兩者之間通過PCI Express總線進行數據傳輸。在具體的CUDA實現中,程序通常劃分為兩部分,在主機上運行的Host代碼和在設備上運行的Device代碼。Host代碼負責程序整體的流程控制和數據交換,而Device代碼則負責執行具體的計算任務。
一個完整的CUDA程序是由一系列的設備端函數并行部分和主機端的串行處理部分共同組成的,主機和設備通過這種方式可以高效地協同工作,實現GPU的加速計算。
CUDA在Host運行的函數庫包括了開發庫(Libraries)、運行時(Runtime)和驅動(Driver)三大部分。其中,Libraries提供了一些常見的數學和科學計算任務運算庫,Runtime API提供了便捷的應用開發接口和運行期組件,開發者可以通過調用API自動管理GPU資源,而Driver API提供了一系列C函數庫,能更底層、更高效地控制GPU資源,但相應的開發者需要手動管理模塊編譯等復雜任務。
CUDA在Device上執行的函數為內核函數(Kernel)通常用于并行計算和數據處理。在Kernel中,并行部分由K個不同的CUDA線程并行執行K次,而有別于普通的C/C++函數只有1次。每一個CUDA內核都以一個聲明指定器開始,程序員通過使用內置變量__global__為每個線程提供一個唯一的全局ID。一組線程被稱為CUDA塊(block)。CUDA塊被分組為一個網格(grid),一個內核以線程塊的網格形式執行。每個CUDA塊由一個流式多處理器(SM)執行,不能遷移到GPU中的其他SM,一個SM可以運行多個并發的CUDA塊,取決于CUDA塊所需的資源,每個內核在一個設備上執行,CUDA支持在一個設備上同時運行多個內核。
豐富而成熟的軟件生態是CUDA被廣泛使用的關鍵原因。
(1)編程語言:CUDA從最初的1.0版本僅支持C語言編程,到現在的CUDA 12.0支持C、C++、Fortran、Python等多種編程語言。此外,NVIDIA還支持了如PyCUDA、ltimesh Hybridizer、OpenACC等眾多第三方工具鏈,不斷提升開發者的使用體驗。
(2)庫:NVIDIA在CUDA平臺上提供了名為CUDA-X的集合層,開發人員可以通過CUDA-X快速部署如cuBLA、NPP、NCCL、cuDNN、TensorRT、OpenCV等多領域常用庫。
(3)其他:NVIDIA還為CUDA開發人員提供了容器部署流程簡化以及集群環境擴展應用程序的工具,讓應用程序更易加速,使得CUDA技術能夠適用于更廣泛的領域。
ROCm(Radeon Open Compute Platform)是AMD基于開源項目的GPU計算生態系統,類似于NVIDIA的CUDA。ROCm支持多種編程語言、編譯器、庫和工具,以加速科學計算、人工智能和機器學習等領域的應用。ROCm還支持多種加速器廠商和架構,提供了開放的可移植性和互操作性。
ROCm支持HIP(類CUDA)和OpenCL兩種GPU編程模型,可實現CUDA到ROCm的遷移。最新的ROCm 5.0支持AMD Infinity Hub上的人工智能框架容器,包括TensorFlow 1.x、PyTorch 1.8、MXNet等,同時改進了ROCm庫和工具的性能和穩定性,包括MIOpen、MIVisionX、rocBLAS、rocFFT、rocRAND等。
OpenCL(Open Compute Language),是面向異構系統通用并行編程、可以在多個平臺和設備上運行的開放標準。OpenCL支持多種編程語言和環境,并提供豐富的工具來幫助開發和調試,可以同時利用CPU、GPU、DSP等不同類型的加速器來執行任務,并支持數據傳輸和同步。
此外,OpenCL支持細粒度和粗粒度并行編程模型,可根據應用需求選擇合適模型提高性能和效率。而OpenCL可移植性有限,不同平臺和設備的功能支持和性能表現存在一定差異,與CUDA相比缺少廣泛的社區支持和成熟的生態圈。
-
amd
+關注
關注
25文章
5479瀏覽量
134304 -
gpu
+關注
關注
28文章
4754瀏覽量
129069 -
C語言
+關注
關注
180文章
7608瀏覽量
137140 -
CUDA
+關注
關注
0文章
121瀏覽量
13643 -
英偉達
+關注
關注
22文章
3800瀏覽量
91337
原文標題:GPU平臺生態:英偉達CUDA和AMD ROCm對比分析
文章出處:【微信號:AI_Architect,微信公眾號:智能計算芯世界】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論