NVIDIA CUDA 13.1 推出 NVIDIA CUDA Tile,這是自 2006 年 NVIDIA CUDA 平臺(tái)發(fā)明以來,最大的一次技術(shù)進(jìn)步。這一令人振奮的創(chuàng)新引入了一套面向 Tile-based 并行編程的虛擬指令集,使開發(fā)者能夠在更高層級(jí)編寫算法,而無需關(guān)心底層專用硬件(如 Tensor Cores)的復(fù)雜細(xì)節(jié)。
本文將介紹 CUDA Tile 的創(chuàng)新之處、工作原理以及使用方法。
為什么在 GPU 上需要 Tile 編程?
CUDA 為開發(fā)者提供了一種單指令多線程(SIMT)的硬件與編程模型。這既要求也允許開發(fā)者對(duì)代碼執(zhí)行方式進(jìn)行非常細(xì)致的控制,從而實(shí)現(xiàn)最大化的靈活性。然而,要讓代碼在各種不同的 GPU 架構(gòu)上都表現(xiàn)良好,往往需要投入大量的調(diào)優(yōu)工作。
NVIDIA CUDA-X、NVIDIA CUTLASS 等庫為開發(fā)者提供了性能優(yōu)化工具,而 CUDA Tile 則進(jìn)一步提供了一種比傳統(tǒng) SIMT 更高層次的 GPU 編程方式。
隨著計(jì)算任務(wù)的發(fā)展,尤其是 AI 領(lǐng)域中,Tensors 已經(jīng)成為基礎(chǔ)的數(shù)據(jù)類型。NVIDIA 也開發(fā)了面向 Tensors 運(yùn)算的專用硬件,例如 NVIDIA Tensor Cores(TC)和 NVIDIA Tensor Memory Accelerators(TMA),并已成為所有新 GPU 架構(gòu)的核心組件。
但硬件越復(fù)雜,軟件就越需要承擔(dān)抽象與封裝的職責(zé)。CUDA Tile 對(duì) Tensor Cores 及其編程模式進(jìn)行了抽象,讓使用 CUDA Tile 的代碼天然兼容當(dāng)前與未來的 Tensor Core 架構(gòu)。
Tile-based 編程的方式是:你只需指定一塊塊數(shù)據(jù),即Tiles,以及這些 Tiles 上要執(zhí)行的運(yùn)算即可。你不再需要在元素級(jí)別指定算法的執(zhí)行方式,編譯器和運(yùn)行時(shí)(runtime )會(huì)自動(dòng)處理。
圖 1 展示了 CUDA Tile 引入的 Tile 模型,與傳統(tǒng) CUDA SIMT 模型之間的概念性差異。

圖 1. Tile 模型(左)將數(shù)據(jù)劃分為 Blocks,而編譯器將其映射到 Threads。SIMT 模型(右)則將數(shù)據(jù)映射到 Blocks 和 Threads
這種編程模式在 Python 這樣的語言中很常見,用戶可以通過 NumPy 這樣的庫指定矩陣等數(shù)據(jù)類型,然后用簡(jiǎn)單的代碼指定并執(zhí)行批量操作。在底層,一切都會(huì)按正確的方式運(yùn)行,而你的計(jì)算對(duì)你來說始終完全透明。
CUDA Tile IR:Tile 編程的基礎(chǔ)
CUDA Tile 的基礎(chǔ)是 CUDA Tile IR(中間表示)。CUDA Tile IR 引入了一套虛擬指令集,使得以 Tile Operations 的方式對(duì)硬件進(jìn)行原生編程成為可能。開發(fā)者可以編寫更高層級(jí)的代碼,并且在多代 GPU 上僅需做極少的改動(dòng)即可高效執(zhí)行。
雖然 NVIDIA Parallel Thread Execution(PTX)為 SIMT 程序提供了可移植性,但 CUDA Tile IR 為 CUDA 平臺(tái)擴(kuò)展了對(duì) Tile-based 程序的原生支持。開發(fā)者專注于將他們的數(shù)據(jù)并行程序劃分為 Tiles 和 Tile Blocks,并讓 CUDA Tile IR 來處理將其映射到諸如 Threads、內(nèi)存層次結(jié)構(gòu)以及 Tensor Cores 等硬件資源上。
通過提升抽象層級(jí),CUDA Tile IR 使用戶能夠?yàn)?NVIDIA 硬件構(gòu)建更高層次的、面向硬件的編譯器、框架以及領(lǐng)域?qū)S谜Z言(DSLs)。用于 Tile 編程的 CUDA Tile IR 類似于用于 SIMT 編程的 PTX。
需要指出的一點(diǎn)是,這并不是一個(gè)非此即彼的選擇。GPU 上的 Tile 編程是編寫 GPU 代碼的另一種方法,但你不必在 SIMT 和 Tile 編程之間做選擇,它們是共存的。當(dāng)你需要 SIMT 時(shí),你依舊像以往一樣編寫你的 Kernels。當(dāng)你希望使用 Tensor Cores 來執(zhí)行運(yùn)算時(shí),你就編寫 Tile Kernels。
圖 2 展示了一個(gè)關(guān)于 CUDA Tile 如何嵌入典型軟件棧的高層示意圖,以及 Tile 路徑如何作為一條獨(dú)立但互補(bǔ)于現(xiàn)有 SIMT 路徑的編譯路徑。

圖 2. Tile 的編譯路徑嵌入完整的軟件棧之中,并與 SIMT 路徑并列存在
開發(fā)者應(yīng)如何使用 CUDA Tile 編寫 GPU 應(yīng)用?
CUDA Tile IR 位于與絕大多數(shù)程序員交互的 Tile 編程的下一層級(jí)。除非你正在編寫一個(gè)編譯器或庫,否則你大概不需要關(guān)心 CUDA Tile IR 軟件的細(xì)節(jié)。
NVIDIA cuTile Python:大多數(shù)開發(fā)者將通過諸如 NVIDIA cuTile Python 這樣的軟件與 CUDA Tile 編程進(jìn)行交互——這是一種由 NVIDIA 提供的 Python 實(shí)現(xiàn),使用 CUDA Tile IR 作為后端。我們有一篇博客解釋了如何使用 cuTile-python,并附上了示例代碼和文檔的鏈接。
CUDA Tile IR:對(duì)于希望構(gòu)建自己 DSL 編譯器或庫的開發(fā)者而言,CUDA Tile IR 就是你與 CUDA Tile 交互的地方。CUDA Tile IR 文檔和規(guī)范包含關(guān)于 CUDA Tile IR 編程抽象、語法和語義的信息。如果你正在編寫一個(gè)當(dāng)前以 PTX 為目標(biāo)的工具/編譯器/庫,那么你可以調(diào)整你的軟件以同時(shí)以 CUDA Tile IR 為目標(biāo)。
如何獲取 CUDA Tile 軟件
CUDA Tile 隨 CUDA 13.1 一同發(fā)布。開發(fā)者可以通過 CUDA Tile 頁面,獲取包括文檔鏈接、GitHub 庫以及示例代碼等信息。
關(guān)于作者
Jonathan Bentz 領(lǐng)導(dǎo) NVIDIA 的 CUDA 技術(shù)營(yíng)銷工程團(tuán)隊(duì),其團(tuán)隊(duì)專注于創(chuàng)建和提供引人入勝的內(nèi)容,并與 CUDA 開發(fā)者建立聯(lián)系。Jonathan 擁有愛荷華州立大學(xué)化學(xué)博士學(xué)位和計(jì)算機(jī)科學(xué)碩士學(xué)位。
Tony Scudiero 是 CUDA 平臺(tái)的技術(shù)營(yíng)銷工程師。他致力于將 CUDA 帶給各種類型和能力的開發(fā)者。在 NVIDIA 任職期間,他曾使用過大型 HPC 系統(tǒng)和應(yīng)用、實(shí)時(shí)聲學(xué)模擬 (VRWorks Audio) 和 Omniverse RTX 渲染器。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5592瀏覽量
109720 -
硬件
+關(guān)注
關(guān)注
11文章
3594瀏覽量
69010 -
編程
+關(guān)注
關(guān)注
90文章
3716瀏覽量
97179
原文標(biāo)題:專注于你的算法 – 讓 NVIDIA CUDA Tile 來處理硬件細(xì)節(jié)
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在NVIDIA CUDA Tile中編寫高性能矩陣乘法
NVIDIA Grid SERIES K2卡兼容CUDA?
Grid K2 cuda下載位置是?
數(shù)碼管的工作原理及使用方法
SRAM的工作原理及其使用方法了解
CUDA核心是什么?CUDA核心的工作原理
點(diǎn)焊機(jī)的工作原理及使用方法
在Python中借助NVIDIA CUDA Tile簡(jiǎn)化GPU編程
NVIDIA CUDA Tile的創(chuàng)新之處、工作原理以及使用方法
評(píng)論