国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Python中借助NVIDIA CUDA Tile簡(jiǎn)化GPU編程

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

掃碼添加小助手

加入工程師交流群

NVIDIA CUDA 13.1 版本新增了基于 Tile 的GPU 編程模式。它是自 CUDA 發(fā)明以來(lái) GPU 編程最核心的更新之一。借助 GPU tile kernels,可以用比 SIMT 模型更高的層級(jí)來(lái)實(shí)現(xiàn)算法。至于如何將計(jì)算任務(wù)拆分到各個(gè)線程,完全由編譯器和運(yùn)行時(shí)在底層自動(dòng)處理。不僅如此,tile kernels 還能夠屏蔽 Tensor Core 等專用硬件的細(xì)節(jié),寫(xiě)出的代碼還能兼容未來(lái)的 GPU 架構(gòu)。借助 NVIDIA cuTile Python開(kāi)發(fā)者可以直接用 Python 編寫(xiě) tile kernels。

什么是cuTile Python?

cuTile Python 是 CUDA Tile 編程模型在 Python 中的實(shí)現(xiàn),基于 CUDA Tile IR 規(guī)范開(kāi)發(fā)。它支持用 Python 編寫(xiě) tile kernels,以 tile-based 模型來(lái)定義 GPU kernels——既可以作為 SIMT 模型的替代,也能作為 SIMT 模型的補(bǔ)充。

SIMT 編程要求明確指定每個(gè) GPU 執(zhí)行線程的任務(wù)。理論上,每個(gè)線程都能獨(dú)立運(yùn)行,執(zhí)行和其他線程不同的代碼路徑。但實(shí)際應(yīng)用中,要充分發(fā)揮 GPU 性能,通常會(huì)采用單線程對(duì)不同數(shù)據(jù)執(zhí)行相同操作的算法設(shè)計(jì)思路。

SIMT 模型的優(yōu)勢(shì)是靈活性高、可定制性強(qiáng),但要達(dá)到頂級(jí)性能,往往需要大量手動(dòng)調(diào)優(yōu)。而 tile model 能夠幫助屏蔽部分硬件底層細(xì)節(jié),而聚焦于更高層級(jí)的算法設(shè)計(jì)。至于 tile 算法如何拆分為線程、如何調(diào)度到 GPU 上執(zhí)行,這些工作都由 NVIDIA CUDA 編譯器和運(yùn)行時(shí)自動(dòng)完成。

cuTile 是專為 NVIDIA GPU 設(shè)計(jì)的并行 kernels 編程模型,核心規(guī)則有四條:

數(shù)組是最核心的數(shù)據(jù)結(jié)構(gòu);

Tiles 是 kernels 操作的數(shù)組子集;

Kernels 是由多個(gè) Block 并行執(zhí)行的函數(shù);

Block 是 GPU 計(jì)算資源的子集,tiles 的操作會(huì)在各個(gè) block 之間并行開(kāi)展。

cuTile 能自動(dòng)處理塊級(jí)并行、異步執(zhí)行、內(nèi)存遷移等 GPU 編程的底層細(xì)節(jié)。它可以充分利用 NVIDIA 硬件的高級(jí)特性,比如 Tensor Cores、共享內(nèi)存、Tensor 內(nèi)存加速器,而且不需要手動(dòng)編寫(xiě)相關(guān)代碼。更重要的是,cuTile 能跨不同 NVIDIA GPU 架構(gòu)遷移,不用重寫(xiě)代碼,就能使用最新的硬件功能。

cuTile適合哪些人使用?

cuTile 面向的是需要編寫(xiě)通用數(shù)據(jù)并行 GPU kernels 的開(kāi)發(fā)者。目前我們重點(diǎn)針對(duì) AI/ML 應(yīng)用中常見(jiàn)的計(jì)算類型優(yōu)化 cuTile,后續(xù)還會(huì)持續(xù)迭代——新增功能和性能特性,讓它能優(yōu)化更多類型的工作負(fù)載。

你可能會(huì)疑惑:CUDA C++ 和 CUDA Python 一直很好用,為什么還要用 cuTile 寫(xiě) kernels?關(guān)于這一點(diǎn),我們?cè)诹硪黄榻B CUDA tile model 的文章里有詳細(xì)說(shuō)明。簡(jiǎn)單來(lái)說(shuō),現(xiàn)在 GPU 硬件架構(gòu)越來(lái)越復(fù)雜,我們提供這樣一層合理的抽象,就是為了能讓開(kāi)發(fā)者更專注于算法本身,不用再花大量精力把算法手動(dòng)適配到特定硬件上。

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

cuTilePython代碼示例

cuTile Python 代碼長(zhǎng)什么樣?如果你學(xué)過(guò) CUDA C++,一定接觸過(guò)經(jīng)典的向量加法 kernels。假設(shè)數(shù)據(jù)已經(jīng)從主機(jī)端拷貝到設(shè)備端,CUDA SIMT 實(shí)現(xiàn)的向量加法 kernels 如下——它接收兩個(gè)向量,逐元素相加后生成第三個(gè)向量,是最基礎(chǔ)的 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];

}

}在這個(gè) kernel 里,每個(gè)線程的任務(wù)都要明確指定。而且你啟動(dòng) kernel 時(shí),還得手動(dòng)選擇要啟動(dòng)的 blocks 和線程數(shù)。

再看等效的 cuTile Python 實(shí)現(xiàn):不用指定每個(gè)線程的操作,只需把數(shù)據(jù)拆成 tiles,定義好每個(gè) tile 的數(shù)學(xué)運(yùn)算就行,剩下的工作全由 cuTile 自動(dòng)處理。

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 的函數(shù),例如,它的作用相當(dāng)于 SIMT kernels 開(kāi)發(fā)者使用 blockIdx.x 與 threadIdx.x。ct.load() 函數(shù)則用于從設(shè)備內(nèi)存中加載指定索引和形狀的 tile 數(shù)據(jù),數(shù)據(jù)加載到 tiles 后,即可用于計(jì)算,所有計(jì)算完成后,ct.store() 會(huì)將 tiled 數(shù)據(jù)寫(xiě)回 GPU 設(shè)備內(nèi)存。

完整實(shí)現(xiàn)代碼

接下來(lái),我們將展示如何在 Python 中調(diào)用這個(gè) vector_add kernels,并提供一份你可直接運(yùn)行的完整 Python 腳本。以下是包含 kernels 定義與主函數(shù)的完整代碼。

"""

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()

如果已經(jīng)安裝好 cuTile Python、CuPy 等必要軟件,運(yùn)行代碼很簡(jiǎn)單,直接執(zhí)行以下命令即可:

$ python3 VectorAdd_quickstart.py

? vector_add_example passed!

恭喜!你已經(jīng)成功運(yùn)行了第一個(gè) cuTile Python 程序。

開(kāi)發(fā)者工具支持

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

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

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

● 選中 vector_add kernel;

● 選擇“Details”標(biāo)簽頁(yè);

● 展開(kāi)“Tile Statistics”報(bào)告板塊。

此時(shí)你會(huì)看到類似圖 1 的界面。

wKgZPGk8y7uAAO91AABgR8uzZEI228.jpg

圖 1. Nsight Compute生成的性能分析報(bào)告,展示vector_add kernel的tile 統(tǒng)計(jì)信息

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

源碼頁(yè)面同樣支持 cuTile kernels,還能查看源碼行級(jí)別的性能指標(biāo)——這和 CUDA C kernels 的支持方式完全一致。

如何獲取 cuTile ?

運(yùn)行 cuTile Python 程序,需要滿足以下環(huán)境要求:

GPU 計(jì)算能力需為 10.x 或 12.x(后續(xù) CUDA 版本會(huì)支持更多 GPU 架構(gòu));

NVIDIA 驅(qū)動(dòng)版本需為 R580 及以上(若要使用 tile 專屬開(kāi)發(fā)者工具,需升級(jí)到 R590);

安裝 CUDA Toolkit 13.1 及以上版本;

Python 版本需為 3.10 及以上;

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

關(guān)于作者

Jonathan Bentz 領(lǐng)導(dǎo) NVIDIA 的 CUDA 技術(shù)營(yíng)銷工程團(tuán)隊(duì),其團(tuán)隊(duì)專注于創(chuàng)建和提供引人入勝的內(nèi)容,并與 CUDA 開(kāi)發(fā)者建立聯(lián)系。Jonathan 擁有愛(ài)荷華州立大學(xué)化學(xué)博士學(xué)位和計(jì)算機(jī)科學(xué)碩士學(xué)位。

Tony Scudiero 是 CUDA 平臺(tái)的技術(shù)營(yíng)銷工程師。他致力于將 CUDA 帶給各種類型和能力的開(kāi)發(fā)者。在 NVIDIA 任職期間,他曾使用過(guò)大型 HPC 系統(tǒng)和應(yīng)用、實(shí)時(shí)聲學(xué)模擬 (VRWorks Audio) 和 Omniverse RTX 渲染器。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5513

    瀏覽量

    109200
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5118

    瀏覽量

    134556
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3709

    瀏覽量

    96879
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4861

    瀏覽量

    89671

原文標(biāo)題:在 Python 中借助 NVIDIA CUDA Tile 簡(jiǎn)化 GPU 編程

文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NVIDIA Tesla K40C K40M 高精密并行計(jì)算GPU

    ;amp;quot; 21000 三年質(zhì)保 麗臺(tái)盒裝 現(xiàn)貨 Nvidia TeslaK20M &quot;GPU 的數(shù)量和類型:1 Kepler GK110CUDA核心數(shù)量:2496
    發(fā)表于 09-02 21:17

    NVIDIA英偉達(dá)】招聘QA Engineer

    Hi,各位工程師們,金三銀四,不如現(xiàn)在 —NVIDIA 最新開(kāi)放職位,“職”為你而來(lái)!!沒(méi)錯(cuò),作為GPU的發(fā)明者,NVIDIA過(guò)去一年斬獲殊榮無(wú)限,這一切皆因我們有一群如你一樣為夢(mèng)想不斷奮斗的員工
    發(fā)表于 03-03 11:19

    NVIDIA火熱招聘GPU高性能計(jì)算架構(gòu)師

    GPU架構(gòu)設(shè)計(jì)者提供反饋,以改善和推進(jìn)未來(lái)GPU的架構(gòu)設(shè)計(jì)基本要求(其一即可): * 嚴(yán)謹(jǐn)?shù)倪壿嬎季S和分析能力* 有CUDA代碼調(diào)優(yōu)經(jīng)驗(yàn)(或者SIMD等架構(gòu)的調(diào)優(yōu)經(jīng)驗(yàn))* 熟悉矩陣計(jì)算的優(yōu)化和加速* 較強(qiáng)C++
    發(fā)表于 09-01 17:22

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

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

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

    或者Shell3.了解圖形開(kāi)發(fā)工具4.測(cè)試圖形開(kāi)發(fā)工具不同操作系統(tǒng)下的情況5.寫(xiě)測(cè)試計(jì)劃6.英文熟悉CUDA測(cè)試分析工程師[上海]1.優(yōu)秀的解決問(wèn)題的能力2.精通Linux3.精通Python4.熟悉
    發(fā)表于 03-21 16:09

    NVIDIA-SMI:監(jiān)控GPU的絕佳起點(diǎn)

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

    用于vGPU的GPU調(diào)度程序

    你好。我對(duì)NVidia開(kāi)發(fā)人員提出了問(wèn)題和建議。關(guān)于GPU調(diào)度程序的真正功能的信息很少。調(diào)度程序只是簡(jiǎn)單的循環(huán)法嗎?它是可編程的嗎?它是從dom0編程的(例如,Dom0
    發(fā)表于 09-11 16:37

    CUDA編程教程

    Nvidia CUDA 2.0編程教程
    發(fā)表于 03-05 07:30

    linux安裝GPU顯卡驅(qū)動(dòng)、CUDA和cuDNN庫(kù)

    搞機(jī)器學(xué)習(xí)也有一段時(shí)間了,每次部署GPU開(kāi)發(fā)環(huán)境就是一場(chǎng)戰(zhàn)爭(zhēng),先記錄一下基本步驟,結(jié)合網(wǎng)上資料和個(gè)人實(shí)踐整理如下:1、檢查BIOS啟動(dòng)項(xiàng),關(guān)閉一些選項(xiàng) 開(kāi)機(jī)啟動(dòng)項(xiàng)的Security選項(xiàng)檢查
    發(fā)表于 07-09 07:45

    Ubuntu上使用Nvidia GPU訓(xùn)練模型

    問(wèn)題最近在Ubuntu上使用Nvidia GPU訓(xùn)練模型的時(shí)候,沒(méi)有問(wèn)題,過(guò)一會(huì)再訓(xùn)練出現(xiàn)非常卡頓,使用nvidia-smi查看發(fā)現(xiàn),顯示GPU的風(fēng)扇和電源報(bào)錯(cuò):解決方案自動(dòng)風(fēng)扇控制
    發(fā)表于 01-03 08:24

    探求NVIDIA GPU極限性能的利器

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

    NVIDIA推出適用于Python的VPF,簡(jiǎn)化開(kāi)發(fā)GPU加速視頻編碼/解碼

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

    如何使用WarpPython環(huán)境編寫(xiě)CUDA內(nèi)核

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

    CUDA簡(jiǎn)介: CUDA編程模型概述

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

    使用CUDA進(jìn)行編程的要求有哪些

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