伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Python中借助NVIDIA CUDA Tile簡化GPU編程

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 2025-12-13 10:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NVIDIA CUDA 13.1 版本新增了基于 Tile 的GPU 編程模式。它是自 CUDA 發明以來 GPU 編程最核心的更新之一。借助 GPU tile kernels,可以用比 SIMT 模型更高的層級來實現算法。至于如何將計算任務拆分到各個線程,完全由編譯器和運行時在底層自動處理。不僅如此,tile kernels 還能夠屏蔽 Tensor Core 等專用硬件的細節,寫出的代碼還能兼容未來的 GPU 架構。借助 NVIDIA cuTile Python開發者可以直接用 Python 編寫 tile kernels。

什么是cuTile Python?

cuTile Python 是 CUDA Tile 編程模型在 Python 中的實現,基于 CUDA Tile IR 規范開發。它支持用 Python 編寫 tile kernels,以 tile-based 模型來定義 GPU kernels——既可以作為 SIMT 模型的替代,也能作為 SIMT 模型的補充。

SIMT 編程要求明確指定每個 GPU 執行線程的任務。理論上,每個線程都能獨立運行,執行和其他線程不同的代碼路徑。但實際應用中,要充分發揮 GPU 性能,通常會采用單線程對不同數據執行相同操作的算法設計思路。

SIMT 模型的優勢是靈活性高、可定制性強,但要達到頂級性能,往往需要大量手動調優。而 tile model 能夠幫助屏蔽部分硬件底層細節,而聚焦于更高層級的算法設計。至于 tile 算法如何拆分為線程、如何調度到 GPU 上執行,這些工作都由 NVIDIA CUDA 編譯器和運行時自動完成。

cuTile 是專為 NVIDIA GPU 設計的并行 kernels 編程模型,核心規則有四條:

數組是最核心的數據結構;

Tiles 是 kernels 操作的數組子集;

Kernels 是由多個 Block 并行執行的函數;

Block 是 GPU 計算資源的子集,tiles 的操作會在各個 block 之間并行開展。

cuTile 能自動處理塊級并行、異步執行、內存遷移等 GPU 編程的底層細節。它可以充分利用 NVIDIA 硬件的高級特性,比如 Tensor Cores、共享內存、Tensor 內存加速器,而且不需要手動編寫相關代碼。更重要的是,cuTile 能跨不同 NVIDIA GPU 架構遷移,不用重寫代碼,就能使用最新的硬件功能。

cuTile適合哪些人使用?

cuTile 面向的是需要編寫通用數據并行 GPU kernels 的開發者。目前我們重點針對 AI/ML 應用中常見的計算類型優化 cuTile,后續還會持續迭代——新增功能和性能特性,讓它能優化更多類型的工作負載。

你可能會疑惑:CUDA C++ 和 CUDA Python 一直很好用,為什么還要用 cuTile 寫 kernels?關于這一點,我們在另一篇介紹 CUDA tile model 的文章里有詳細說明。簡單來說,現在 GPU 硬件架構越來越復雜,我們提供這樣一層合理的抽象,就是為了能讓開發者更專注于算法本身,不用再花大量精力把算法手動適配到特定硬件上。

用 tile 模式寫代碼,既能利用 Tensor Cores 的性能,又能保證代碼兼容未來的 GPU 架構。就像 PTX 是 SIMT 模型的底層虛擬指令集架構(ISA),CUDA Tile IR 就是 tile-based 編程的虛擬指令集架構。它支持用更高層級表達算法,軟件和硬件會在底層自動把這種表達映射到 Tensor Cores,助力實現峰值性能。

cuTilePython代碼示例

cuTile Python 代碼長什么樣?如果你學過 CUDA C++,一定接觸過經典的向量加法 kernels。假設數據已經從主機端拷貝到設備端,CUDA SIMT 實現的向量加法 kernels 如下——它接收兩個向量,逐元素相加后生成第三個向量,是最基礎的 CUDA kernels 之一。

__global__ void vecAdd(float* A, float* B, float* C, int vectorLength)

{

/* calculate my thread index */

int workIndex = threadIdx.x + blockIdx.x*blockDim.x;

if(workIndex < vectorLength)

{

/* perform the vector addition */

C[workIndex] = A[workIndex] + B[workIndex];

}

}在這個 kernel 里,每個線程的任務都要明確指定。而且你啟動 kernel 時,還得手動選擇要啟動的 blocks 和線程數。

再看等效的 cuTile Python 實現:不用指定每個線程的操作,只需把數據拆成 tiles,定義好每個 tile 的數學運算就行,剩下的工作全由 cuTile 自動處理。

cuTile Python kernel 代碼如下:

import cuda.tile as ct

@ct.kernel

def vector_add(a, b, c, tile_size: ct.Constant[int]):

# Get the 1D pid

pid = ct.bid(0)

# Load input tiles

a_tile = ct.load(a, index=(pid,) , shape=(tile_size, ) )

b_tile = ct.load(b, index=(pid,) , shape=(tile_size, ) )

# Perform elementwise addition

result = a_tile + b_tile

# Store result

ct.store(c, index=(pid, ), tile=result)

ct.bid(0) 是用于獲取(本例中)第 0 維度塊 ID 的函數,例如,它的作用相當于 SIMT kernels 開發者使用 blockIdx.x 與 threadIdx.x。ct.load() 函數則用于從設備內存中加載指定索引和形狀的 tile 數據,數據加載到 tiles 后,即可用于計算,所有計算完成后,ct.store() 會將 tiled 數據寫回 GPU 設備內存。

完整實現代碼

接下來,我們將展示如何在 Python 中調用這個 vector_add kernels,并提供一份你可直接運行的完整 Python 腳本。以下是包含 kernels 定義與主函數的完整代碼。

"""

Example demonstrating simple vector addition.

Shows how to perform elementwise operations on vectors.

"""

from math import ceil

import cupy as cp

import numpy as np

import cuda.tile as ct

@ct.kernel

def vector_add(a, b, c, tile_size: ct.Constant[int]):

# Get the 1D pid

pid = ct.bid(0)

# Load input tiles

a_tile = ct.load(a, index=(pid,) , shape=(tile_size, ) )

b_tile = ct.load(b, index=(pid,) , shape=(tile_size, ) )

# Perform elementwise addition

result = a_tile + b_tile

# Store result

ct.store(c, index=(pid, ), tile=result)

def test():

# Create input data

vector_size = 2**12

tile_size = 2**4

grid = (ceil(vector_size / tile_size),1,1)

a = cp.random.uniform(-1, 1, vector_size)

b = cp.random.uniform(-1, 1, vector_size)

c = cp.zeros_like(a)

# Launch kernel

ct.launch(cp.cuda.get_current_stream(),

grid, # 1D grid of processors

vector_add,

(a, b, c, tile_size))

# Copy to host only to compare

a_np = cp.asnumpy(a)

b_np = cp.asnumpy(b)

c_np = cp.asnumpy(c)

# Verify results

expected = a_np + b_np

np.testing.assert_array_almost_equal(c_np, expected)

print("? vector_add_example passed!")

if __name__ == "__main__":

test()

如果已經安裝好 cuTile Python、CuPy 等必要軟件,運行代碼很簡單,直接執行以下命令即可:

$ python3 VectorAdd_quickstart.py

? vector_add_example passed!

恭喜!你已經成功運行了第一個 cuTile Python 程序。

開發者工具支持

[]()cuTile kernels 的性能分析可以用 NVIDIA Nsight Compute,操作方式和 SIMT kernels 完全一樣。

$ ncu -o VecAddProfile --set detailed python3 VectorAdd_quickstart.py

生成性能分析文件后,用 Nsight Compute 圖形界面打開,按以下步驟操作:

● 選中 vector_add kernel;

● 選擇“Details”標簽頁;

● 展開“Tile Statistics”報告板塊。

此時你會看到類似圖 1 的界面。

wKgZPGk8y7uAAO91AABgR8uzZEI228.jpg

圖 1. Nsight Compute生成的性能分析報告,展示vector_add kernel的tile 統計信息

請注意,Tile Statistics 板塊包含了指定的 tile 數量、大小(由編譯器自動選擇),以及其他 tile 專屬信息。

源碼頁面同樣支持 cuTile kernels,還能查看源碼行級別的性能指標——這和 CUDA C kernels 的支持方式完全一致。

如何獲取 cuTile ?

運行 cuTile Python 程序,需要滿足以下環境要求:

GPU 計算能力需為 10.x 或 12.x(后續 CUDA 版本會支持更多 GPU 架構);

NVIDIA 驅動版本需為 R580 及以上(若要使用 tile 專屬開發者工具,需升級到 R590);

安裝 CUDA Toolkit 13.1 及以上版本;

Python 版本需為 3.10 及以上;

安裝 cuTile Python 包:執行 pip install cuda-tile 命令即可完成安裝。

關于作者

Jonathan Bentz 領導 NVIDIA 的 CUDA 技術營銷工程團隊,其團隊專注于創建和提供引人入勝的內容,并與 CUDA 開發者建立聯系。Jonathan 擁有愛荷華州立大學化學博士學位和計算機科學碩士學位。

Tony Scudiero 是 CUDA 平臺的技術營銷工程師。他致力于將 CUDA 帶給各種類型和能力的開發者。在 NVIDIA 任職期間,他曾使用過大型 HPC 系統和應用、實時聲學模擬 (VRWorks Audio) 和 Omniverse RTX 渲染器。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    5639

    瀏覽量

    109885
  • gpu
    gpu
    +關注

    關注

    28

    文章

    5217

    瀏覽量

    135632
  • 編程
    +關注

    關注

    90

    文章

    3717

    瀏覽量

    97249
  • python
    +關注

    關注

    58

    文章

    4879

    瀏覽量

    90142

原文標題:在 Python 中借助 NVIDIA CUDA Tile 簡化 GPU 編程

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在NVIDIA CUDA Tile編寫高性能矩陣乘法

    本博文是系列課程的一部分,旨在幫助開發者學習 NVIDIA CUDA Tile 編程,掌握構建高性能 GPU 內核的方法,并以矩陣乘法作為核
    的頭像 發表于 01-22 16:43 ?4963次閱讀
    如何在<b class='flag-5'>NVIDIA</b> <b class='flag-5'>CUDA</b> <b class='flag-5'>Tile</b><b class='flag-5'>中</b>編寫高性能矩陣乘法

    NVIDIA Tesla K40C K40M 高精密并行計算GPU

    ;amp;quot; 21000 三年質保 麗臺盒裝 現貨 Nvidia TeslaK20M &quot;GPU 的數量和類型:1 Kepler GK110CUDA核心數量:2496
    發表于 09-02 21:17

    NVIDIA火熱招聘GPU高性能計算架構師

    GPU架構設計者提供反饋,以改善和推進未來GPU的架構設計基本要求(其一即可): * 嚴謹的邏輯思維和分析能力* 有CUDA代碼調優經驗(或者SIMD等架構的調優經驗)* 熟悉矩陣計算的優化和加速* 較強C++
    發表于 09-01 17:22

    NVIDIA英偉達 GPU廠商 招聘軟件類職位(上海/深圳)

    Hi, 大家好,全球知名GPU廠商NVIDIA,熱招軟件測試、測試開發等相關職位。眾所周知,目前NV的深度學習、CUDA非常火熱,是IT/AI行業最火的企業之一,股價更是一年之類翻了
    發表于 09-06 11:01

    NVIDIA 招聘 軟件測試篇(深圳、上海)

    或者Shell3.了解圖形開發工具4.測試圖形開發工具不同操作系統下的情況5.寫測試計劃6.英文熟悉CUDA測試分析工程師[上海]1.優秀的解決問題的能力2.精通Linux3.精通Python4.熟悉
    發表于 03-21 16:09

    NVIDIA-SMI:監控GPU的絕佳起點

    nvidia-smi可執行文件位于虛擬機管理程序上。如果在同一部署您選擇GPU上使用作為傳遞,那么GPU正在尋找訪客上的
    發表于 09-04 15:18

    用于vGPU的GPU調度程序

    你好。我對NVidia開發人員提出了問題和建議。關于GPU調度程序的真正功能的信息很少。調度程序只是簡單的循環法嗎?它是可編程的嗎?它是從dom0編程的(例如,Dom0
    發表于 09-11 16:37

    CUDA編程教程

    Nvidia CUDA 2.0編程教程
    發表于 03-05 07:30

    探求NVIDIA GPU極限性能的利器

    1、探求 NVIDIA GPU 極限性能的利器  通常的 CUDA 編程,用戶主要通過
    發表于 10-11 14:35

    NVIDIA推出適用于Python的VPF,簡化開發GPU加速視頻編碼/解碼

    NVIDIA推出了適用于Python的開源視頻處理框架“VideoProcessingFramework”(VPF)。據悉,VPF 是一組開源的C ++庫和Python綁定,可與其封閉源代碼Codec SDK進行交互。該框架的功
    的頭像 發表于 12-18 14:25 ?7873次閱讀

    如何使用WarpPython環境編寫CUDA內核

      通常,實時物理模擬代碼是用低級 CUDA C ++編寫的,以獲得最佳性能。在這篇文章,我們將介紹 NVIDIA Warp ,這是一個新的 Python 框架,可以輕松地用
    的頭像 發表于 04-02 16:15 ?3660次閱讀

    CUDA簡介: CUDA編程模型概述

    CUDA 編程模型,線程是進行計算或內存操作的最低抽象級別。 從基于 NVIDIA Ampere
    的頭像 發表于 04-20 17:16 ?4047次閱讀
    <b class='flag-5'>CUDA</b>簡介: <b class='flag-5'>CUDA</b><b class='flag-5'>編程</b>模型概述

    使用CUDA進行編程的要求有哪些

    CUDANVIDIA的一種用于GPU編程的技術,CUDA核心是GPU上的一組小型計算單元,它們
    的頭像 發表于 01-08 09:20 ?3483次閱讀

    NVIDIA CUDA Tile的創新之處、工作原理以及使用方法

    NVIDIA CUDA 13.1 推出 NVIDIA CUDA Tile,這是自 2006 年 NVID
    的頭像 發表于 12-24 10:17 ?514次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>CUDA</b> <b class='flag-5'>Tile</b>的創新之處、工作原理以及使用方法

    借助NVIDIA CUDA Tile IR后端推進OpenAI Triton的GPU編程

    NVIDIA CUDA Tile 是基于 GPU編程模型,其設計目標是為 NVIDIA Te
    的頭像 發表于 02-10 10:31 ?326次閱讀