chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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)員 ? 來(lái)源: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ū)。不過(guò),最重要的也許是 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):它的靈活性和無(wú)類型的高級(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 代碼更快,而且,自然地,許多人希望使用加速器來(lái)從他們的代碼中獲得更高的性能。

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ù)修飾符來(lái)指示 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ù)就可以獲得顯著的加速,而無(wú)需編寫任何特定于 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 (通過(guò) 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)來(lái)計(jì)算當(dāng)前線程的全局 X 和 Y 像素索引。與其他 CUDA 語(yǔ)言一樣,我們通過(guò)在括號(hào)中插入一個(gè)“執(zhí)行配置”( CUDA – 表示運(yùn)行內(nèi)核的線程數(shù)和線程塊數(shù))來(lái)啟動(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 是可用的,無(wú)需您在第一天就投入使用。

Numba 是一個(gè)經(jīng)過(guò) 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 擁有超過(guò) 20 年的 GPUs 軟件開發(fā)經(jīng)驗(yàn),從圖形和游戲到基于物理的模擬,到并行算法和高性能計(jì)算。當(dāng)他還是北卡羅來(lái)納大學(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

    文章

    5682

    瀏覽量

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

    關(guān)注

    28

    文章

    5258

    瀏覽量

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

    關(guān)注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    成功案例:象帝先計(jì)算技術(shù)與Imagination合作——面向現(xiàn)代圖形與計(jì)算工作負(fù)載的專業(yè)GPU

    為專業(yè)計(jì)算設(shè)計(jì)桌面GPU桌面GPU不僅用于游戲,還能加速從專業(yè)可視化、高級(jí)模擬到數(shù)據(jù)密集型計(jì)算在內(nèi)的多種現(xiàn)代工作負(fù)載。專業(yè)用戶需要能在多種應(yīng)用場(chǎng)景中穩(wěn)定運(yùn)行的高性能、多功能平臺(tái)。構(gòu)建桌
    的頭像 發(fā)表于 03-09 09:17 ?418次閱讀
    成功案例:象帝先<b class='flag-5'>計(jì)算</b>技術(shù)與Imagination合作——<b class='flag-5'>面向</b>現(xiàn)代圖形與<b class='flag-5'>計(jì)算</b>工作負(fù)載的專業(yè)GPU

    借助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 ?494次閱讀

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

    NVIDIA CUDA 13.1 推出 NVIDIA CUDA Tile,這是自 2006 年 NVIDIA CUDA 平臺(tái)發(fā)明以來(lái),最大的一次技術(shù)進(jìn)步。這一令人振奮的創(chuàng)新引入了一套面向
    的頭像 發(fā)表于 12-24 10:17 ?621次閱讀
    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í)來(lái)實(shí)現(xiàn)算法。至于如何將計(jì)算任務(wù)拆分到各個(gè)線程,完全由編譯器和運(yùn)行時(shí)在底層自動(dòng)處理。不僅如此,tile kernels 還能夠屏蔽 Tensor Core 等專用硬件的細(xì)節(jié),寫出的代碼還能
    的頭像 發(fā)表于 12-13 10:12 ?1381次閱讀
    在Python中借助NVIDIA <b class='flag-5'>CUDA</b> Tile簡(jiǎn)化GPU編程

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

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

    如何使用 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 ?963次閱讀
    邊緣<b class='flag-5'>計(jì)算</b>中的AI<b class='flag-5'>加速</b>器類型與應(yīng)用

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

    和加法器的方法來(lái)加速濾波運(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)算

    和加法器的方法來(lái)加速濾波運(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 ?971次閱讀
    在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 ?1221次閱讀

    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 ?1020次閱讀
    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 ?1927次閱讀