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

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

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

3天內不再提示

如何用Python語法加速C+的數值計算

星星科技指導員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-10 10:41 ? 次閱讀

Rob Smallshire 曾經說過,“你可以在 C ++中編寫更快的代碼,但是在 Python 中編寫代碼更快。”自從它發布超過十年前, CUDA 已經給 C 和 C ++程序員提供了在 Nvidia GPU 上最大化其代碼性能的能力。

最近, CuPy 和 PyTorch 等庫允許解釋語言的開發人員利用其他語言優化的 CUDA 庫的速度。這些解釋語言有許多優秀的特性,包括易于閱讀的語法、自動內存管理和所有函數的通用類型。

然而,有時擁有這些功能意味著由于內存管理和其他超出您控制范圍的因素而付出性能代價。為了節省開發時間,性能的降低通常是值得的。不過,當性能成為一個問題時,它最終可能需要重寫應用程序的某些部分。

如果你仍然可以使用 C ++來獲得最大的性能,同時仍然能從解釋語言中獲得所有好處呢?

MatX 概述

Matx 是一個實驗性的 GPU 加速的數值計算 C ++庫,旨在跨越用戶之間可能需要的最高性能之間的差距,在所有 CUDA 庫中使用相同的簡單語法和類型。使用 CUDA 11.0 中添加的 C ++ 17 支持, MatX 允許您編寫與 Python 這樣的高級語言相同的自然代數表達式,而不會帶來性能損失。

張量類型

MatX 包括許多流行數學庫的接口,如 cuBLAS 、 CUTLASS 、 cuFFT 和 CUB ,但在所有這些庫中使用一種通用數據類型(tensor_t)。這大大簡化了這些庫的 API ,方法是推斷出它知道的關于張量類型的信息,并在此基礎上調用正確的 API 。

下面的代碼示例顯示了一個基于 FFT 的重采樣器。

python

N = min(ns, ns_resamp)
nyq = N // 2 + 1 # Create an empty vector
sv = np.empty(ns) # Real to complex FFT
svc = np.fft.rfft(sv) # Slice
sv = svc[0:nyq] # Complex to real IFFT
rsv = np.fft.irfft(sv, ns_resamp)

馬特克斯

uint32_t N = std::min(ns, ns_resamp); uint32_t nyq = N / 2 + 1; auto sv = make_tensor({ns}); auto svc = make_tensor({ns / 2 + 1}); auto rv = make_tensor({ns_resamp}); // Real to complex FFT
fft(svc, sv, stream); // Slice the vector
auto sv = svc.Slice({0}, {nyq}); // Complex to real IFFT

ifft(rsv, sv, stream);雖然代碼長度和可讀性相似,但 A100 上的 MatX 版本比 CPU 上運行的 NumPy 版本快約 2100 倍。與直接使用 CUDA 庫相比, MatX 版本還有許多隱藏的好處,例如類型檢查、輸入和輸出大小檢查,以及在沒有指針操作的情況下切片張量。

不過,張量類型并不限于 FFT ,同樣的變量也可以在其他庫和表達式中使用。例如,如果您想在重采樣器輸出上使用 Cutslass 執行 GEMM ,可以編寫以下代碼:

matmul(resampOut, resampView, B, stream);

在這段代碼中, resampOut 和 B 是 GEMM 操作的適當大小的張量。與前面的 FFT 示例一樣,類型、大小、批次和步幅都由張量元數據推斷。使用強類型的 C ++ API 也意味著許多運行時和編譯時錯誤可以在不進行附加調試的情況下捕獲。

除了支持優化的 CUDA 庫作為后端,這些相同的張量類型還可以用于代數表達式中,以執行元素操作:

(C = A * B + (D / 5.0) + cos(E)).run(stream);

惰性評估

MatX 使用惰性計算在編譯時創建一個 GPU 內核,表示括號中的表達式。只有在表達式上調用 run 函數時,操作才會在 GPU 上執行。支持 40 多種不同類型的運算符,可以在不同大小和類型的張量之間混合匹配,并具有兼容的參數。如果你看一下之前作為 CUDA 內核編寫的表達式,它看起來像這樣:

__global__ void Expression( float *C, const float *A, const float *B, const float *D, const float *E, int length)
{ for (int idx = blockIdx.x * blockDim.x + threadIdx.x; idx < length; idx += blockDim.x * gridDim.x) { C[idx] = A[idx] * B[idx] + (D[idx] / 5.0) + cosf(E[idx]); }?

雖然前面的代碼并不復雜,但它隱藏了幾個問題:

數據類型硬編碼為浮動。要更改為其他類型,必須編輯內核簽名。精明的讀者會說,使用模板,讓編譯器為您推斷類型。雖然這可能適用于某些類型,但并不適用于您可能想要使用的所有類型。例如, cosf 不是為半精度類型定義的,因此必須使用編譯時條件來處理不同的類型。

對函數簽名的任何微小更改都需要一個完全不同的函數。例如,如果您想在某些情況下添加張量 F ,但仍保留原始簽名,該怎么辦?這將是兩個幾乎相同的功能。

雖然 grid-stride loop 是一種很好的實踐,用于處理不同大小的塊和網格,但您仍然必須有代碼來確保在內核啟動期間有足夠的線程使 GPU 保持忙碌。

假設所有輸入為 1D 向量;更高的維度可能會隨著不統一的步伐而斷裂。

還有許多其他缺陷沒有列出,包括無法廣播不同大小的張量、不檢查大小、需要連續內存布局等等。

顯然,這段代碼只在特定條件下工作,而 MatX 版本解決了所有這些問題,而且通常保持與直接編寫內核相同的性能。

附加 MatX 功能

MatX 的其他主要功能包括:

通過切片、克隆和置換現有張量創建零拷貝張量視圖。

支持任意維張量。

用于動態生成數據的生成器,無需存儲在內存中。常見的例子是創建線性間隔向量、漢明窗或對角矩陣。

支持 CUDA 中使用的幾乎所有類型,包括半精度( FP16 和 BF16 )和復數(全精度和半精度)。

線性解算器通過 cuSolver 、使用 CUB 進行排序和掃描、使用 cuRAND 生成隨機數、減少等功能實現

總結

MatX 是根據 BSDv3 許可證開源的。

關于作者

Cliff Burdick 是 NVIDIA 的高級開發技術工程師,他專注于優化信號處理、數值計算以及 GPU 和網絡 IO 的 GPU 代碼。

Justin Luitjens 是 NVIDIA 的高級開發技術經理,致力于加速 GPU 上的應用程序。他擁有猶他大學的科學計算博士學位。

Adam Thompson 是 NVIDIA 的高級解決方案架構師。他有信號處理方面的背景,他的職業生涯一直在參與和領導一些項目,這些項目專注于射頻分類、數據壓縮、高性能計算、統計信號處理以及管理和設計針對大數據框架的應用程序。他擁有喬治亞理工大學電子與計算機工程碩士學位和克萊姆森大學學士學位。

審核編輯:郭婷

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

    關注

    14

    文章

    5038

    瀏覽量

    103306
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4754

    瀏覽量

    129099
  • python
    +關注

    關注

    56

    文章

    4800

    瀏覽量

    84843
收藏 人收藏

    評論

    相關推薦

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

    許可證模型的加速令牌或SIMULIA統一許可證模型的SimUnit令牌或積分授權。 4. GPU計算的啟用 - 交互式模擬:通過加速對話框啟用,打開求解器對話框,點擊“加速”按鈕,打
    發表于 12-16 14:25

    NVIDIA發布cuPyNumeric加速計算

    加速計算庫幫助科研人員無縫地擴展到強大的計算集群,并且無需修改 Python 代碼,推進科學發現。
    的頭像 發表于 11-21 10:05 ?291次閱讀

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優勢和適用場景。以下是對這兩種編程語言的對比: 一、語法和易用性 Python 語法簡潔,代碼更易讀,非常適合初學者。
    的頭像 發表于 11-15 09:31 ?370次閱讀

    GPU加速計算平臺是什么

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

    廣成科技USBCAN-II C+型CAN盒是什么

    USBCAN-II C+是沈陽廣成科技有限公司出品的一種集成2個CAN通道的CAN盒工具,你也可以叫它CAN卡、CAN分析儀、USBCAN分析儀。相對于前身USBCAN-II C分析儀,USBCAN-II C+的外殼由金屬轉變為
    的頭像 發表于 08-30 11:47 ?735次閱讀

    廣成科技USBCAN II C+可用的GCANtools功能

    USBCAN II C+是沈陽廣成科技有限公司出品的一種雙通道CAN分析儀工具,其搭配的軟件主要廣成科技自己家的GCANTOOLS以及其他廠家的CANPro、CANTEST。相比于USBCAN II
    的頭像 發表于 08-30 11:45 ?668次閱讀

    pytorch和python的關系是什么

    ,PyTorch已經成為了一個非常受歡迎的框架。本文將介紹PyTorch和Python之間的關系,以及它們在深度學習領域的應用。 Python簡介 Python是一種高級、解釋型、通用的編程語言,由Guido van Rossu
    的頭像 發表于 08-01 15:27 ?2100次閱讀

    智能加速計算卡設計原理圖:628-基于VU3P的雙路100G光纖加速計算卡 XCVU3P板卡

    DA 信號處理板卡 , PCIe 光纖加速計算卡 , XCVU3P板卡 , 高速視頻采集卡 , 信號輸出驗證,?PCIe 光纖加速計算卡?,?XCVU3P板卡?,?光纖
    的頭像 發表于 08-01 11:03 ?353次閱讀
    智能<b class='flag-5'>加速</b><b class='flag-5'>計算</b>卡設計原理圖:628-基于VU3P的雙路100G光纖<b class='flag-5'>加速</b><b class='flag-5'>計算</b>卡 XCVU3P板卡

    怎么導出python邊緣計算中的APP?

    怎么導出python邊緣計算中的APP,想進行修改又找不到源碼
    發表于 07-25 06:13

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python
    的頭像 發表于 07-24 10:41 ?599次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發表于 07-16 10:38 ?1278次閱讀

    Python中的人工智能框架與實例

    在人工智能(AI)領域,Python因其簡潔的語法、豐富的庫和強大的社區支持,成為了最受歡迎的編程語言之一。本文將詳細介紹Python中的人工智能框架,并通過具體實例展示如何使用這些框架來實現不同的人工智能應用。
    的頭像 發表于 07-15 14:54 ?1762次閱讀

    華為云開發者桌面全新發布 CodeArts IDE for Python,極致優雅云原生開發體驗

    Python 編碼體驗。 Python 是一種編程語言,廣泛用于 Web 應用程序、軟件開發、數據科學和機器學習 (ML)。Python 以其優雅的語法、動態解釋性、豐富的標準庫、極
    的頭像 發表于 05-10 00:27 ?1257次閱讀
    華為云開發者桌面全新發布 CodeArts IDE for <b class='flag-5'>Python</b>,極致優雅云原生開發體驗

    國產半導體CIM龍頭「賽美特」完成C+輪融資

    3月18日消息,國產半導體CIM龍頭「賽美特」宣布已于近期完成數億元C+輪融資,本輪融資由成都策源資本領投,允泰資本、申萬宏源、藍海洋基金、興業銀行等跟投。融資資金主要用于產研投入和人才儲備,并加速
    的頭像 發表于 03-18 09:26 ?1811次閱讀
    國產半導體CIM龍頭「賽美特」完成<b class='flag-5'>C+</b>輪融資

    c語言,c++,java,python區別

    C語言、C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言: C語言是一種面向過程的編程語言。它具有底層的特性,能
    的頭像 發表于 02-05 14:11 ?2490次閱讀
    主站蜘蛛池模板: 女人张开腿双腿让男人桶| 午夜免费片| 亚洲综合色在线观看| 手机看片午夜| 天天摸天天摸天天躁| 国产乱辈通伦影片在线播放亚洲 | 么公的好大好硬好深好爽在线视频| 亚洲人成毛片线播放| 国产成人夜间影院在线观看| 永久视频在线观看| 午夜影吧| 欧美aaaaa性bbbbb小妇| 天天做天天添天天谢| 国产一区二区精品| 四虎影院网| 亚洲综合色网| 五月婷婷狠狠| 欧美性xxxxbbbb| 久青草视频在线播放| 爱爱动态视频免费视频| 国产色视频一区| bt在线天堂| 丁香九月婷婷| 国产日韩精品欧美一区色| www.色亚洲| 免费观看美女被cao视频| 五月天激情在线| 男女性接交无遮挡免费看视频| 亚洲一区二区三区免费在线观看| 美女写真mm爽爽爽| 婷婷色在线| 两性色午夜视频免费国产| 日本不卡视频一区二区三区| 黑粗硬大欧美视频| 欧美操穴| 在线精品国产三级| 怡红院黄色| 午夜影院操| 色优优| 色婷婷综合久久久中文字幕| 美女被拍拍拍拍拍拍拍拍|