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

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

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

3天內不再提示

面向數組計算任務而設計的Numba具有CUDA加速功能

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

掃碼添加小助手

加入工程師交流群

Python 是一種高效的動態編程語言,廣泛應用于科學、工程和數據分析應用程序中。影響 python 流行的因素有很多,包括它簡潔而富有表現力的語法和標準的數據結構、全面的“包含電池”的標準庫、優秀的文檔、廣泛的庫和工具生態系統、專業支持的可用性以及大而開放的社區。不過,最重要的也許是 Python 這樣的動態類型化、解釋性語言所能實現的高生產率。 Python 既靈活又靈活,這使它成為快速原型設計和構建完整系統的優秀語言。

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

Numba :高性能計算的高生產率

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

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

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 上編譯并運行相同的函數,我們只需將目標更改為“ CPU ”,這將在 CPU 上產生編譯的、矢量化的 C 代碼級別的性能。這種靈活性有助于您生成更多可重用的代碼,并允許您在沒有 GPUs 的機器上進行開發。

GPU -Python 加速庫

CUDA 并行計算平臺的優勢之一是其可用 GPU – 加速庫 的寬度。Numba 團隊的另一個項目叫做 pyculib ,提供到 CUDA cuBLAS (稠密線性代數) 、 快速傅里葉變換 和 cuRAND (隨機數生成) 庫的 Python 接口。許多應用程序只需使用這些庫就可以獲得顯著的加速,而無需編寫任何特定于 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 實現大規模并行

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

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

您可以在 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 的服務器上, CUDA Python Mandelbrot 代碼的運行速度比純 Python 版本快近 1700 倍。 1700x 似乎是一個不切實際的加速,但請記住,我們將編譯的、并行的、 GPU – 加速的 Python 代碼與 CPU 上解釋的單線程 Python 代碼進行比較。

今天就開始使用 Numba

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

Numba 是一個經過 BSD 許可的開源項目,它本身嚴重依賴于 LLVM 編譯器的功能。 Numba 的 GPU 后端使用了基于 LLVM 的 NVIDIA 編譯器 SDK 。 CUDA 庫的 膿皰 包裝器也是開源的,并且是 BSD 許可的。

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

關于作者

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

審核編輯:郭婷

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

    關注

    14

    文章

    5592

    瀏覽量

    109722
  • gpu
    gpu
    +關注

    關注

    28

    文章

    5194

    瀏覽量

    135434
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    NVIDIA CUDA Tile 是基于 GPU 的編程模型,其設計目標是為 NVIDIA Tensor Cores 提供可移植性,從而釋放 GPU 的極限性能。CUDA Tile 的一大優勢是允許開發者基于其構建自定義的 DSL。
    的頭像 發表于 02-10 10:31 ?240次閱讀

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

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

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

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

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

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

    NVIDIA CUDA 13.1版本的新增功能與改進

    NVIDIA CUDA 13.1 是自 CUDA 二十年前發明以來,規模最大、內容最全面的一次更新。
    的頭像 發表于 12-13 10:08 ?2205次閱讀

    如何使用 ARM FPU 加速浮點計算?

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

    邊緣計算中的AI加速器類型與應用

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

    利用e203中NICE協處理器加速濾波運算

    和加法器的方法來加速濾波運算。 使用NICE協處理器加速的程序為一個長循環,計算較長(100到1000量級)的兩個浮點數組乘累加的結果,分別命名為ifm (Input Feature
    發表于 10-21 13:40

    基于e203中NICE協處理器加速濾波運算

    和加法器的方法來加速濾波運算。 使用NICE協處理器加速的程序為一個長循環,計算較長(100到1000量級)的兩個浮點數組乘累加的結果,分別命名為ifm (Input Feature
    發表于 10-21 09:54

    在Imagination GPU上優化計算任務的十大技巧

    Imagination「開發者文檔」網站正式上線,涵蓋了從計算機圖形學基礎到如何充分發揮Imagination高能效PowerVRGPU架構優勢的豐富內容。網站中不僅增加了針對我們最新架構代際和計算
    的頭像 發表于 09-25 09:37 ?849次閱讀
    在Imagination GPU上優化<b class='flag-5'>計算</b><b class='flag-5'>任務</b>的十大技巧

    NVIDIA RAPIDS 25.06版本新增多項功能

    RAPIDS 是一套面向 Python 數據科學的 NVIDIA CUDA-X 庫,最新發布的 25.06 版本引入了多項亮眼新功能,其中包括 Polars GPU 流執行引擎——這是一種面向
    的頭像 發表于 09-09 09:54 ?1061次閱讀

    Axelera AI:邊緣計算加速智能創新解決方案

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

    MQTT網關具備邊緣計算功能嗎?有什么功能

    現代MQTT網關通常具備邊緣計算功能,尤其是為適應物聯網(IoT)場景中低延遲、高可靠、帶寬優化等需求而設計的新一代網關。傳統MQTT網關的核心功能是協議轉換(如將Modbus、Zig
    的頭像 發表于 07-15 15:01 ?876次閱讀
    MQTT網關具備邊緣<b class='flag-5'>計算</b><b class='flag-5'>功能</b>嗎?有什么<b class='flag-5'>功能</b>?

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

    人工智能(AI)的快速發展離不開高性能計算硬件的支持,而傳統CPU由于架構限制,難以高效處理AI任務中的大規模并行計算需求。因此,專為AI優化的芯片應運而生,成為推動深度學習、計算機視
    的頭像 發表于 07-09 15:59 ?1563次閱讀

    使用NVIDIA CUDA-X庫加速科學和工程發展

    NVIDIA GTC 全球 AI 大會上宣布,開發者現在可以通過 CUDA-X 與新一代超級芯片架構的協同,實現 CPU 和 GPU 資源間深度自動化整合與調度,相較于傳統加速計算架構,該技術可使
    的頭像 發表于 03-25 15:11 ?1531次閱讀