在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    5267

    瀏覽量

    105903
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4920

    瀏覽量

    130776
  • 編譯器
    +關注

    關注

    1

    文章

    1657

    瀏覽量

    49959
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    GPU加速計算平臺的優勢

    傳統的CPU雖然在日常計算任務中表現出色,但在面對大規模并行計算需求時,其性能往往捉襟見肘。而GPU加速計算平臺憑借其獨特的優勢,吸引了行業
    的頭像 發表于 02-23 16:16 ?369次閱讀

    云 GPU 加速計算:突破傳統算力瓶頸的利刃

    在數字化時代,數據呈爆炸式增長,傳統的算力已難以滿足復雜計算任務的需求。無論是人工智能的深度學習、大數據的分析處理,還是科學研究中的模擬計算,都對算力提出了極高的要求。而云 GPU 加速
    的頭像 發表于 02-17 10:36 ?255次閱讀

    STM32N6 | ST首款具有 AI 加速功能的高性能MCU

    處理技術以實現DSP功能,并配備了ST Neural-ART accelerator?,這是一款專為高能效邊緣AI應用而設計的內部NPU。它具有1GHz的時鐘速度和高達600 GOPS,支持
    的頭像 發表于 01-15 18:17 ?3128次閱讀
    STM32N6 | ST首款<b class='flag-5'>具有</b> AI <b class='flag-5'>加速</b><b class='flag-5'>功能</b>的高性能MCU

    《CST Studio Suite 2024 GPU加速計算指南》

    。 2. 操作系統支持:CST Studio Suite在不同操作系統上持續測試,可在支持的操作系統上使用GPU計算,具體參考相關文檔。 3. 許可證:GPU計算功能通過CST Studio Suite
    發表于 12-16 14:25

    NVIDIA加速全球大多數超級計算機推動科技進步

    HPCwire 讀者和編輯選擇獎。 自 2006 年發布 CUDA 以來,NVIDIA 不斷推動 AI 和加速計算的進步,最新發布的全球最強超級計算機 TOP500 榜單突顯了該公司
    的頭像 發表于 11-24 14:38 ?643次閱讀
    NVIDIA<b class='flag-5'>加速</b>全球大多數超級<b class='flag-5'>計算</b>機推動科技進步

    指針數組和二維數組有沒有區別

    。 首先是指針數組 s1。 s1 本身是個一維數組數組有三個元素,每個元素都是個指針。如果是 64 位系統,三個指針就占了 24 個字節。 使用 sizeof 計算 s1 的大小,結
    的頭像 發表于 11-24 11:12 ?504次閱讀

    英偉達與谷歌聯手加速量子計算設備設計

    子處理器的復雜物理過程。這一舉措旨在深入探索量子計算的潛力,為下一代設備的研發提供有力支持。 此外,谷歌還將借助英偉達提供的混合量子-經典計算平臺CUDA-Q,加速開發新型量子組件。這
    的頭像 發表于 11-21 11:08 ?706次閱讀

    C語言數組應用計算機導論A第6講:數組

    C語言數組應用計算機導論A第6講:數組
    發表于 11-20 15:33 ?0次下載

    英偉達與谷歌攜手加速量子計算設備設計

    英偉達近日宣布,將與谷歌量子AI團隊展開合作,共同推進量子計算軟硬件工具的研發。雙方將利用英偉達CUDA-Q平臺提供的模擬支持,加快設計谷歌下一代量子計算設備。
    的頭像 發表于 11-19 16:21 ?483次閱讀

    S7t-VG6 VectorPath加速卡的特性和功能

    S7t-VG6 VectorPath加速卡是Achronix公司聯合BittWare公司(Molex旗下的領先企業級FPGA加速器產品供應商)推出的一類全新的、面向高性能計算和數據
    的頭像 發表于 11-14 11:19 ?758次閱讀

    GPU加速計算平臺是什么

    GPU加速計算平臺,簡而言之,是利用圖形處理器(GPU)的強大并行計算能力來加速科學計算、數據分析、機器學習等復雜
    的頭像 發表于 10-25 09:23 ?554次閱讀

    有沒有大佬知道NI vision 有沒有辦法通過gpu和cuda加速圖像處理

    有沒有大佬知道NI vision 有沒有辦法通過gpu和cuda加速圖像處理
    發表于 10-20 09:14

    labview字符串數組轉化為數值數組

    在LabVIEW中,將字符串數組轉換為數值數組是一項常見的任務,尤其是在處理數據采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數據類型 在開始之前,了解LabVIEW中的數據類型是非
    的頭像 發表于 09-04 17:47 ?5105次閱讀

    打破英偉達CUDA壁壘?AMD顯卡現在也能無縫適配CUDA

    電子發燒友網報道(文/梁浩斌)一直以來,圍繞CUDA打造的軟件生態,是英偉達在GPU領域最大的護城河,尤其是隨著目前AI領域的發展加速,市場火爆,英偉達GPU+CUDA的開發生態則更加穩固,AMD
    的頭像 發表于 07-19 00:16 ?5789次閱讀
    主站蜘蛛池模板: 四虎影院免费在线播放 | 国产 麻豆| 色涩在线| 最新在线视频 | 日本不卡毛片一二三四 | 免费公开在线视频 | 不卡一区二区在线观看 | 特级中国aaa毛片 | 亚洲天堂2013| 复古毛片| xxxxxx日本老师hd68 | 午夜毛片不卡高清免费 | 黄色三级国产 | 欧美精品久久久久久久小说 | 49pao强力在线高清基地 | 69 hd xxxx日本 | 五月天综合婷婷 | 亚洲乱论 | 欧美色吧视频在线观看 | 国产网红主播精品福利大秀专区 | 亚洲人成网站色7777 | 朱元璋传奇1998王耿豪版 | 色婷婷视频在线观看 | 拍拍拍拍拍拍拍无挡大全免费 | 亚洲欧美一区二区三区麻豆 | 精品国产成人系列 | 亚洲一区中文字幕在线观看 | 亚洲一区亚洲二区 | q2002韩国理论 | 天天躁日日躁狠狠躁一级毛片 | 床上激情四射 | 日本福利网址 | 久久久国产精品免费看 | 婷婷在线免费观看 | 又粗又大又猛又爽免费视频 | 国产精品香蕉在线一区 | 永久视频在线观看 | 1024成人 | 日本精高清区一 | 日本卡一卡2卡3卡4精品卡无人区 | 久久精品视频7 |