91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

面向數(shù)組計(jì)算任務(wù)而設(shè)計(jì)的Numba具有CUDA加速功能

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:Mark Harris ? 2022-04-11 09:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python 是一種高效的動(dòng)態(tài)編程語(yǔ)言,廣泛應(yīng)用于科學(xué)、工程和數(shù)據(jù)分析應(yīng)用程序中。影響 python 流行的因素有很多,包括它簡(jiǎn)潔而富有表現(xiàn)力的語(yǔ)法和標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu)、全面的“包含電池”的標(biāo)準(zhǔn)庫(kù)、優(yōu)秀的文檔、廣泛的庫(kù)和工具生態(tài)系統(tǒng)、專業(yè)支持的可用性以及大而開放的社區(qū)。不過,最重要的也許是 Python 這樣的動(dòng)態(tài)類型化、解釋性語(yǔ)言所能實(shí)現(xiàn)的高生產(chǎn)率。 Python 既靈活又靈活,這使它成為快速原型設(shè)計(jì)和構(gòu)建完整系統(tǒng)的優(yōu)秀語(yǔ)言。

但是 Python 最大的優(yōu)點(diǎn)也可能是它最大的弱點(diǎn):它的靈活性和無類型的高級(jí)語(yǔ)法會(huì)導(dǎo)致數(shù)據(jù)和計(jì)算密集型程序的性能下降。因此,關(guān)心效率的 Python 程序員通常用 C 重寫最里面的循環(huán),并從 Python 調(diào)用編譯后的 C 函數(shù)。有許多項(xiàng)目旨在使這種優(yōu)化更容易,例如 Cython ,但它們通常需要學(xué)習(xí)新的語(yǔ)法。理想情況下, Python 程序員希望在不使用其他編程語(yǔ)言的情況下使現(xiàn)有的 Python 代碼更快,而且,自然地,許多人希望使用加速器來從他們的代碼中獲得更高的性能。

Numba :高性能計(jì)算的高生產(chǎn)率

你為什么不想在 Numba 上用 Python Anaconda 編譯一個(gè) CUDA 的 Python 編譯器,因?yàn)槟悴幌胗?Python 的 GPUs 編譯一個(gè) PythonCPU 語(yǔ)言。答案當(dāng)然是運(yùn)行本機(jī)編譯代碼比運(yùn)行動(dòng)態(tài)解釋代碼快很多倍。 Numba 的工作原理是允許您為 Python 函數(shù)指定類型簽名,這樣可以在運(yùn)行時(shí)進(jìn)行編譯(這是“ Just-in-time ”或 JIT 編譯)。 Numba 動(dòng)態(tài)編譯代碼的能力意味著您不會(huì)放棄 Python 的靈活性。這是向提供高生產(chǎn)率編程和高性能計(jì)算的理想組合邁出的一大步。

使用 Numba ,現(xiàn)在可以編寫標(biāo)準(zhǔn)的 Python 函數(shù)并在支持 CUDA -GPU 上運(yùn)行它們。 Numba 是為面向數(shù)組的計(jì)算任務(wù)而設(shè)計(jì)的,很像廣泛使用的 NumPy 庫(kù)。面向數(shù)組的計(jì)算任務(wù)中的數(shù)據(jù)并行性自然適合 GPUs 這樣的加速器。 Numba 理解 NumPy 數(shù)組類型,并使用它們生成高效的編譯代碼,以便在 GPUs 或多核 CPU 上執(zhí)行。所需的編程工作可以簡(jiǎn)單到添加一個(gè)函數(shù)修飾符來指示 Numba 為 GPU 編譯。例如,下面代碼中的 @vectorize 修飾符在運(yùn)行時(shí)生成標(biāo)量函數(shù) Add 的編譯矢量化版本,以便可以在 GPU 上并行處理數(shù)據(jù)數(shù)組。

import numpy as np
from numba import vectorize @vectorize(['float32(float32, float32)'], target='cuda')
def Add(a, b): return a + b # Initialize arrays
N = 100000
A = np.ones(N, dtype=np.float32)
B = np.ones(A.shape, dtype=A.dtype)
C = np.empty_like(A, dtype=A.dtype) # Add arrays on GPU

C = Add(A, B)要在 CPU 上編譯并運(yùn)行相同的函數(shù),我們只需將目標(biāo)更改為“ CPU ”,這將在 CPU 上產(chǎn)生編譯的、矢量化的 C 代碼級(jí)別的性能。這種靈活性有助于您生成更多可重用的代碼,并允許您在沒有 GPUs 的機(jī)器上進(jìn)行開發(fā)。

GPU -Python 加速庫(kù)

CUDA 并行計(jì)算平臺(tái)的優(yōu)勢(shì)之一是其可用 GPU – 加速庫(kù) 的寬度。Numba 團(tuán)隊(duì)的另一個(gè)項(xiàng)目叫做 pyculib ,提供到 CUDA cuBLAS (稠密線性代數(shù)) 、 快速傅里葉變換 和 cuRAND (隨機(jī)數(shù)生成) 庫(kù)的 Python 接口。許多應(yīng)用程序只需使用這些庫(kù)就可以獲得顯著的加速,而無需編寫任何特定于 GPU 的代碼。

import numpy as np
from pyculib import rand as curand prng = curand.PRNG(rndtype=curand.PRNG.XORWOW)
rand = np.empty(100000)
prng.uniform(rand)

print rand[:10]使用 CUDA Python 實(shí)現(xiàn)大規(guī)模并行

Anaconda (以前的 Continuum Analytics )認(rèn)識(shí)到,在某些計(jì)算上實(shí)現(xiàn)大的加速需要一個(gè)更具表現(xiàn)力的編程接口,對(duì)并行性的控制比庫(kù)和自動(dòng)循環(huán)矢量化所能提供的更詳細(xì)。因此, Numba 還有另一組重要的特性,它們構(gòu)成了非正式的“ CUDA Python ”。 NUBA 公開了 CUDA 編程模型,就像 CUDA C / C ++中一樣,但是使用純 Python 語(yǔ)法,這樣程序員就可以創(chuàng)建定制的、并行的并行內(nèi)核,而不必留下 Python 的舒適性和優(yōu)點(diǎn)。 Numba 的 CUDA JIT (通過 decorator 或 function call 提供)在運(yùn)行時(shí)編譯 CUDA Python 函數(shù),將它們專門化為您使用的類型,而且它的 CUDA Python API 提供了對(duì)數(shù)據(jù)傳輸和 CUDA 流等功能的顯式控制。

下面的代碼示例用一個(gè)簡(jiǎn)單的 Mandelbrot set 內(nèi)核演示了這一點(diǎn)。請(qǐng)注意, mandel_kernel 函數(shù)使用 Numba 提供的 cuda.threadIdx, cuda.blockIdx, cuda.blockDim, and cuda.gridDim 結(jié)構(gòu)來計(jì)算當(dāng)前線程的全局 X 和 Y 像素索引。與其他 CUDA 語(yǔ)言一樣,我們通過在括號(hào)中插入一個(gè)“執(zhí)行配置”( CUDA – 表示運(yùn)行內(nèi)核的線程數(shù)和線程塊數(shù))來啟動(dòng)內(nèi)核函數(shù)名和參數(shù)列表: mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20) 。您還可以看到使用 to_hostto_device API 函數(shù)在 GPU 之間復(fù)制數(shù)據(jù)。

您可以在 Github 上獲得完整的 Mandelbrot 示例的 Jupyter 筆記本 。

@cuda.jit(device=True)
def mandel(x, y, max_iters): """ Given the real and imaginary parts of a complex number, determine if it is a candidate for membership in the Mandelbrot set given a fixed number of iterations. """ c = complex(x, y) z = 0.0j for i in range(max_iters): z = z*z + c if (z.real*z.real + z.imag*z.imag) >= 4: return i return max_iters @cuda.jit
def mandel_kernel(min_x, max_x, min_y, max_y, image, iters): height = image.shape[0] width = image.shape[1] pixel_size_x = (max_x - min_x) / width pixel_size_y = (max_y - min_y) / height startX = cuda.blockDim.x * cuda.blockIdx.x + cuda.threadIdx.x startY = cuda.blockDim.y * cuda.blockIdx.y + cuda.threadIdx.y gridX = cuda.gridDim.x * cuda.blockDim.x; gridY = cuda.gridDim.y * cuda.blockDim.y; for x in range(startX, width, gridX): real = min_x + x * pixel_size_x for y in range(startY, height, gridY): imag = min_y + y * pixel_size_y image[y, x] = mandel(real, imag, iters) gimage = np.zeros((1024, 1536), dtype = np.uint8)
blockdim = (32, 8)
griddim = (32,16) start = timer()
d_image = cuda.to_device(gimage)
mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20) d_image.to_host()

dt = timer() - start print "Mandelbrot created on GPU in %f s" % dt imshow(gimage)在帶有 NVIDIA Tesla P100GPU 和 Intel Xeon E5-2698 v3CPU 的服務(wù)器上, CUDA Python Mandelbrot 代碼的運(yùn)行速度比純 Python 版本快近 1700 倍。 1700x 似乎是一個(gè)不切實(shí)際的加速,但請(qǐng)記住,我們將編譯的、并行的、 GPU – 加速的 Python 代碼與 CPU 上解釋的單線程 Python 代碼進(jìn)行比較。

今天就開始使用 Numba

Numba 為 Python 開發(fā)人員提供了一個(gè)進(jìn)入 GPU 加速計(jì)算的簡(jiǎn)單入口,并為使用日益復(fù)雜的 CUDA 代碼提供了一條路徑,只需使用最少的新語(yǔ)法和行話。您可以從簡(jiǎn)單的函數(shù)修飾符開始自動(dòng)編譯函數(shù),或者使用 pyculib 公開的功能強(qiáng)大的 CUDA 庫(kù)。隨著您對(duì)并行編程概念的深入理解,以及當(dāng)您需要對(duì)并行線程進(jìn)行富有表現(xiàn)力和靈活的控制時(shí), CUDA 是可用的,無需您在第一天就投入使用。

Numba 是一個(gè)經(jīng)過 BSD 許可的開源項(xiàng)目,它本身嚴(yán)重依賴于 LLVM 編譯器的功能。 Numba 的 GPU 后端使用了基于 LLVM 的 NVIDIA 編譯器 SDK 。 CUDA 庫(kù)的 膿皰 包裝器也是開源的,并且是 BSD 許可的。

要開始使用 Numba ,第一步是下載并安裝 Anaconda 分布 ,這是一個(gè)“完全免費(fèi)的企業(yè)級(jí) Python 發(fā)行版,用于大規(guī)模數(shù)據(jù)處理、預(yù)測(cè)分析和科學(xué)計(jì)算”,其中包括許多流行的軟件包( NumPy 、 Scipy 、 Matplotlib 、 iPython 等)和功能強(qiáng)大的包管理器“ conda ”。一旦安裝了 Anaconda ,輸入 conda install numba cudatoolkit pyculib 安裝所需的 CUDA 包。然后查看 ContinuumIO github 存儲(chǔ)庫(kù)上的 CUDA 的 Numba 教程 。

關(guān)于作者

Mark Harris 是 NVIDIA 杰出的工程師,致力于 RAPIDS 。 Mark 擁有超過 20 年的 GPUs 軟件開發(fā)經(jīng)驗(yàn),從圖形和游戲到基于物理的模擬,到并行算法和高性能計(jì)算。當(dāng)他還是北卡羅來納大學(xué)的博士生時(shí),他意識(shí)到了一種新生的趨勢(shì),并為此創(chuàng)造了一個(gè)名字: GPGPU (圖形處理單元上的通用計(jì)算)。

審核編輯:郭婷

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

    關(guān)注

    14

    文章

    5594

    瀏覽量

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

    關(guān)注

    28

    文章

    5194

    瀏覽量

    135461
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    借助NVIDIA CUDA Tile IR后端推進(jìn)OpenAI Triton的GPU編程

    NVIDIA CUDA Tile 是基于 GPU 的編程模型,其設(shè)計(jì)目標(biāo)是為 NVIDIA Tensor Cores 提供可移植性,從而釋放 GPU 的極限性能。CUDA Tile 的一大優(yōu)勢(shì)是允許開發(fā)者基于其構(gòu)建自定義的 DSL。
    的頭像 發(fā)表于 02-10 10:31 ?245次閱讀

    NVIDIA CUDA Tile的創(chuàng)新之處、工作原理以及使用方法

    NVIDIA CUDA 13.1 推出 NVIDIA CUDA Tile,這是自 2006 年 NVIDIA CUDA 平臺(tái)發(fā)明以來,最大的一次技術(shù)進(jìn)步。這一令人振奮的創(chuàng)新引入了一套面向
    的頭像 發(fā)表于 12-24 10:17 ?473次閱讀
    NVIDIA <b class='flag-5'>CUDA</b> Tile的創(chuàng)新之處、工作原理以及使用方法

    Banana Pi BPI-CM6 計(jì)算模塊將 8 核 RISC-V 處理器帶入 CM4 外形尺寸

    源開發(fā)者極具吸引力,并具備長(zhǎng)期的靈活性。除了常規(guī)的 CPU 功能外,該模塊還集成了 Imagine IMG BXE-2-32 GPU(運(yùn)行頻率約為 819 MHz),用于圖形處理和通用 GPU 加速任務(wù)
    發(fā)表于 12-20 09:01

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

    模型更高的層級(jí)來實(shí)現(xiàn)算法。至于如何將計(jì)算任務(wù)拆分到各個(gè)線程,完全由編譯器和運(yùn)行時(shí)在底層自動(dòng)處理。不僅如此,tile kernels 還能夠屏蔽 Tensor Core 等專用硬件的細(xì)節(jié),寫出的代碼還能
    的頭像 發(fā)表于 12-13 10:12 ?1202次閱讀
    在Python中借助NVIDIA <b class='flag-5'>CUDA</b> Tile簡(jiǎn)化GPU編程

    NVIDIA CUDA 13.1版本的新增功能與改進(jìn)

    NVIDIA CUDA 13.1 是自 CUDA 二十年前發(fā)明以來,規(guī)模最大、內(nèi)容最全面的一次更新。
    的頭像 發(fā)表于 12-13 10:08 ?2208次閱讀

    如何使用 ARM FPU 加速浮點(diǎn)計(jì)算?

    浮點(diǎn)操作全部使用了FPU相關(guān)指令。 四、使用**測(cè)試FPU加速性能1. 測(cè)試準(zhǔn)備需要準(zhǔn)備一份裸機(jī)工程,具有屏幕打點(diǎn)顯示功能和串口打印功能。 2. 移植**分形測(cè)試代碼**測(cè)試是通
    發(fā)表于 11-19 06:51

    邊緣計(jì)算中的AI加速器類型與應(yīng)用

    提升AI應(yīng)用的性能。在邊緣計(jì)算中,有多種類型的AI加速器,各自具有不同的優(yōu)勢(shì)、局限性和適用場(chǎng)景。AI加速器在邊緣計(jì)算中的作用人
    的頭像 發(fā)表于 11-06 13:42 ?816次閱讀
    邊緣<b class='flag-5'>計(jì)算</b>中的AI<b class='flag-5'>加速</b>器類型與應(yīng)用

    利用e203中NICE協(xié)處理器加速濾波運(yùn)算

    和加法器的方法來加速濾波運(yùn)算。 使用NICE協(xié)處理器加速的程序?yàn)橐粋€(gè)長(zhǎng)循環(huán),計(jì)算較長(zhǎng)(100到1000量級(jí))的兩個(gè)浮點(diǎn)數(shù)組乘累加的結(jié)果,分別命名為ifm (Input Feature
    發(fā)表于 10-21 13:40

    基于e203中NICE協(xié)處理器加速濾波運(yùn)算

    和加法器的方法來加速濾波運(yùn)算。 使用NICE協(xié)處理器加速的程序?yàn)橐粋€(gè)長(zhǎng)循環(huán),計(jì)算較長(zhǎng)(100到1000量級(jí))的兩個(gè)浮點(diǎn)數(shù)組乘累加的結(jié)果,分別命名為ifm (Input Feature
    發(fā)表于 10-21 09:54

    在Imagination GPU上優(yōu)化計(jì)算任務(wù)的十大技巧

    Imagination「開發(fā)者文檔」網(wǎng)站正式上線,涵蓋了從計(jì)算機(jī)圖形學(xué)基礎(chǔ)到如何充分發(fā)揮Imagination高能效PowerVRGPU架構(gòu)優(yōu)勢(shì)的豐富內(nèi)容。網(wǎng)站中不僅增加了針對(duì)我們最新架構(gòu)代際和計(jì)算
    的頭像 發(fā)表于 09-25 09:37 ?853次閱讀
    在Imagination GPU上優(yōu)化<b class='flag-5'>計(jì)算</b><b class='flag-5'>任務(wù)</b>的十大技巧

    NVIDIA RAPIDS 25.06版本新增多項(xiàng)功能

    RAPIDS 是一套面向 Python 數(shù)據(jù)科學(xué)的 NVIDIA CUDA-X 庫(kù),最新發(fā)布的 25.06 版本引入了多項(xiàng)亮眼新功能,其中包括 Polars GPU 流執(zhí)行引擎——這是一種面向
    的頭像 發(fā)表于 09-09 09:54 ?1066次閱讀

    Axelera AI:邊緣計(jì)算加速智能創(chuàng)新解決方案

    隨著人工智能技術(shù)的不斷發(fā)展,邊緣計(jì)算(EdgeComputing)已成為企業(yè)創(chuàng)新與數(shù)字化轉(zhuǎn)型的重要引擎。如何在有限的計(jì)算資源下,實(shí)現(xiàn)高速且精確的AI推理任務(wù),是企業(yè)面臨的主要挑戰(zhàn)之一
    的頭像 發(fā)表于 07-17 11:00 ?1094次閱讀
    Axelera AI:邊緣<b class='flag-5'>計(jì)算</b><b class='flag-5'>加速</b>智能創(chuàng)新解決方案

    MQTT網(wǎng)關(guān)具備邊緣計(jì)算功能嗎?有什么功能?

    現(xiàn)代MQTT網(wǎng)關(guān)通常具備邊緣計(jì)算功能,尤其是為適應(yīng)物聯(lián)網(wǎng)(IoT)場(chǎng)景中低延遲、高可靠、帶寬優(yōu)化等需求而設(shè)計(jì)的新一代網(wǎng)關(guān)。傳統(tǒng)MQTT網(wǎng)關(guān)的核心功能是協(xié)議轉(zhuǎn)換(如將Modbus、Zig
    的頭像 發(fā)表于 07-15 15:01 ?877次閱讀
    MQTT網(wǎng)關(guān)具備邊緣<b class='flag-5'>計(jì)算</b><b class='flag-5'>功能</b>嗎?有什么<b class='flag-5'>功能</b>?

    AI芯片:加速人工智能計(jì)算的專用硬件引擎

    人工智能(AI)的快速發(fā)展離不開高性能計(jì)算硬件的支持,而傳統(tǒng)CPU由于架構(gòu)限制,難以高效處理AI任務(wù)中的大規(guī)模并行計(jì)算需求。因此,專為AI優(yōu)化的芯片應(yīng)運(yùn)而生,成為推動(dòng)深度學(xué)習(xí)、計(jì)算機(jī)視
    的頭像 發(fā)表于 07-09 15:59 ?1584次閱讀

    使用NVIDIA CUDA-X庫(kù)加速科學(xué)和工程發(fā)展

    NVIDIA GTC 全球 AI 大會(huì)上宣布,開發(fā)者現(xiàn)在可以通過 CUDA-X 與新一代超級(jí)芯片架構(gòu)的協(xié)同,實(shí)現(xiàn) CPU 和 GPU 資源間深度自動(dòng)化整合與調(diào)度,相較于傳統(tǒng)加速計(jì)算架構(gòu),該技術(shù)可使
    的頭像 發(fā)表于 03-25 15:11 ?1536次閱讀