0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

3天內不再提示

使用NVIDIA數學庫加速GPU應用程序

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

掃碼添加小助手

加入工程師交流群

加速 GPU 應用程序的主要方法有三種:編譯器指令、編程語言和預編程庫。編譯器指令,例如 OpenACC a 允許您順利地將代碼移植到 GPU 以使用基于指令的編程模型進行加速。雖然它易于使用,但在某些情況下可能無法提供最佳性能。

編程語言,例如 CUDA C 和 C ++ 在加速應用程序時為您提供更大的靈活性,但用戶也有責任編寫代碼,利用新的硬件功能在最新的硬件上實現最佳性能。這就是預編程庫填補空白的地方。

除了增強代碼的可重用性外,還可以使用 NVIDIA 數學庫 優(yōu)化以充分利用 GPU 硬件,獲得最大的性能增益。如果您正在尋找一種簡單的方法來加速應用程序,請繼續(xù)閱讀,了解如何使用庫來提高應用程序的性能。

NVIDIA 數學庫,作為 CUDA 工具包 和 高性能計算( HPC )軟件開發(fā)工具包( SDK ) ,提供各種計算密集型應用程序中遇到的函數的高質量實現。這些應用包括機器學習、深度學習、分子動力學、計算流體動力學( CFD )、計算化學、醫(yī)學成像和地震勘探等領域。

這些庫旨在取代常見的 CPU 庫,如 OpenBLAS 、 LAPACK 和 Intel MKL ,并加速上的應用程序 NVIDIA GPU 代碼更改最少。為了展示這個過程,我們創(chuàng)建了一個雙精度通用矩陣乘法( DGEMM )功能的示例,以比較 cuBLAS 與 OpenBLAS 的性能。

下面的代碼示例演示了 OpenBLAS DGEMM 調用的使用。

// Init Data
…
// Execute GEMM
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasTrans, m, n, k, alpha, A.data(), lda, B.data(), ldb, beta, C.data(), ldc);

下面的代碼示例 2 顯示了 cuBLAS dgemm 調用。

// Init Data
…
// Data movement to GPU
…
// Execute GEMM
cublasDgemm(cublasH, CUBLAS_OP_N, CUBLAS_OP_T, m, n, k, &alpha, d_A, lda, d_B, ldb, &beta, d_C, ldc));

如上面的示例所示,您可以簡單地添加 OpenBLAS CPU 代碼并用 cuBLAS API 函數替換。 請參閱 cuBLAS 和 OpenBLAS 示例的完整代碼 該 cuBLAS 示例在 NVIDIA ( R ) V100 張量核 GPU 上運行,速度提高了近 20 倍。下圖顯示了運行這些示例時的加速比和規(guī)格。

圖 1.在 GPU 上用 cuBLAS API 函數替換 OpenBLAS CPU 代碼,在 CPU 和 GPU 上, DGEMM 計算的速度提高了 19.2 倍,其中 a 、 B 和 C 矩陣是 4K x 4K 矩陣。

有趣的事實:這些庫在更高級別的 Python API 中調用,例如 cuPy , cuDNN 和 RAPIDS ,因此,如果您有這些方面的經驗,那么您已經在使用這些 NVIDIA 數學庫。

這篇文章的其余部分涵蓋了所有可用的數學庫。

與純 CPU 替代方案相比,提供了更好的性能

有許多 NVIDIA 數學庫可以利用,從 GPU 加速的 BLAS 實現到隨機數生成。請看下面的 NVIDIA 數學庫概述,了解如何開始輕松提高應用程序的性能。

用 cuBLAS 加速基本線性代數子程序

廣義矩陣乘法是人工智能和科學計算中最常用的基本線性代數子程序之一。 GEMM 還構成了深度學習框架的基礎模塊。要了解有關在深度學習框架中使用 GEMM 的更多信息,請參閱 為什么 GEMM 是深度學習的核心 。

這個 cuBLAS 是 BLAS 的一種實現,它利用 GPU 功能實現了極大的速度提升。它包括用于執(zhí)行向量和矩陣運算的例程,例如點積(級別 1 )、向量加法(級別 2 )和矩陣乘法(級別 3 )。

此外,如果您想并行化矩陣乘法, cuBLAS 支持多功能批量 GEMM ,可用于張量計算、機器學習和 LAPACK 。有關提高機器學習和張量收縮效率的更多詳細信息,請參閱 CPU 和 GPU 上具有擴展 BLAS 核的張量收縮 。

古巴文字

如果問題太大,無法安裝在 GPU 上,或者您的應用程序需要單節(jié)點、多 GPU 支持, 古巴文字 是一個很好的選擇。 cuBLASXt 允許混合 CPU- GPU 計算,并支持執(zhí)行矩陣到矩陣操作的 BLAS 級別 3 操作,例如執(zhí)行厄米秩更新的herk。

cuBLASLt

cuBLASLt 是一個覆蓋 GEMM 的輕量級庫。 cuBLASLt 使用融合內核來加速應用程序,將兩個或多個內核“組合”為單個內核,從而允許重用數據并減少數據移動。 cuBLASLt 還允許用戶設置尾聲的后處理選項(應用偏置,然后重新魯變換或對輸入矩陣應用偏置梯度)。

Cubrasmg : CUDA 數學庫早期訪問程序

對于大規(guī)模問題,請查看 Cubrasmg 以獲得最先進的多 GPU 、多節(jié)點矩陣乘法支持。它目前是 CUDA 數學庫早期訪問程序的一部分。 申請訪問權限。

用 cuSPARSE 處理稀疏矩陣

稀疏矩陣、密集矩陣乘法( SpMM )是機器學習、深度學習、 CFD 和地震勘探以及經濟、圖形和數據分析中許多復雜算法的基礎。有效處理稀疏矩陣對于許多科學模擬至關重要。

神經網絡規(guī)模的不斷擴大以及由此產生的成本和資源的增加導致了稀疏化的需要。稀疏性在深度學習訓練和推理中都得到了普及,以優(yōu)化資源的使用。有關這一思想流派的更多信息以及對庫(如 cuSPARSE )的需求,請參閱 深度神經網絡稀疏性的未來 。

cuSPARSE 提供一組用于處理稀疏矩陣的基本線性代數子程序,這些子程序可用于構建 GPU 加速求解器。庫例程有四類:

級別 1 在稀疏向量和密集向量之間運行,例如兩個向量之間的點積。

級別 2 在稀疏矩陣和密集向量(例如矩陣向量積)之間運行。

第 3 級在稀疏矩陣和一組密集向量(例如矩陣乘積)之間運行。

級別 4 允許不同矩陣格式之間的轉換和壓縮稀疏行( CSR )矩陣的壓縮。

cusPARSELt 公司

對于具有計算能力的 cuSPARSE 庫的輕量級版本,可以執(zhí)行稀疏矩陣密集矩陣乘法以及用于修剪和壓縮矩陣的輔助函數,請嘗試 cusPARSELt 。要更好地了解 CUSPASSELT 庫,請參閱 使用 CUSPASSELT 利用 NVIDIA 安培結構稀疏性。

使用割傳感器加速張量應用

這個 cuTENSOR 庫 是一個張量線性代數庫實現。張量是機器學習應用的核心,是推導應用問題控制方程的重要數學工具。 cuTENSOR 提供了直接張量收縮、張量約化和元素級張量運算的例程。 cuTENSOR 用于提高深度學習訓練和推理、計算機視覺、量子化學和計算物理應用中的性能。

切割傳感器

如果您仍然想要 cuTENSOR 功能,但支持可以在單個節(jié)點中跨多 GPU 分布的大張量,例如 DGX A100 , 切割傳感器 是圖書館的首選。它提供了廣泛的混合精度支持,其主要計算例程包括直接張量收縮、張量約化和元素級張量運算。

使用 cuSOLVER 的 GPU 加速 LAPACK 功能

這個 庫索爾弗庫 是一個用于基于 cuBLAS 和 cuSPARSE 庫的線性代數函數的高級軟件包。 cuSOLVER 提供了類似 LAPACK 的功能,例如矩陣分解、密集矩陣的三角形求解例程、稀疏最小二乘解算器和特征值解算器。

cuSOLVER 有三個獨立的組件:

cuSolverDN 用于密集矩陣分解。

cuSolverSP 提供了一組基于稀疏 QR 分解的稀疏例程。

cuSolverRF 是一個稀疏重分解包,用于求解具有共享稀疏模式的矩陣序列。

cusOLVERMg 公司

對于 GPU 加速的 ScaLAPACK 特性,考慮對稱特征求解器、 1-D 列塊循環(huán)布局支持以及對 cuSOLVER 特性的單節(jié)點多 GPU 支持 cusOLVERMg 。

庫索爾文普

求解大型線性方程組需要多節(jié)點、多 GPU 支持。以其上下分解和 Cholesky 分解特性而聞名, 庫索爾文普 是一個很好的解決方案。

用 cuRAND 大規(guī)模生成隨機數

這個 cuRAND 庫 重點介紹通過主機( CPU ) API 或設備( GPU ) API 上的偽隨機或準隨機數生成器生成隨機數。主機 API 可以純粹在主機上生成隨機數并將其存儲在主機內存中,也可以在主機上調用庫的設備上生成隨機數,但隨機數生成發(fā)生在設備上并存儲在全局內存中。

設備 API 定義了用于設置隨機數生成器狀態(tài)和生成隨機數序列的函數,用戶內核可以立即使用這些函數,而無需對全局內存進行讀寫。一些基于物理的問題表明需要大規(guī)模隨機數生成。

蒙特卡洛模擬是 GPU 上隨機數生成器的一種用例。 在 CUDA Fortran 中開發(fā)基于 GPU 的蒙特卡洛并行偽隨機神經網絡 重點介紹了 cuRAND 在大規(guī)模生成隨機數中的應用。

使用 cuFFT 計算快速傅立葉變換

cuFFT CUDA 快速傅立葉變換( FFT )庫為在 NVIDIA GPU 上計算 FFT 提供了一個簡單的接口。 FFT 是一種分治算法,用于有效計算復數或實值數據集的離散傅立葉變換。它是計算物理和一般信號處理中應用最廣泛的數值算法之一。

cuFFT 可用于廣泛的應用,包括醫(yī)學成像和流體動力學。 光聲顯微鏡定量血流成像的并行計算 說明了 cuFFT 在基于物理的應用程序中的使用。具有現有 FFTW 應用程序的用戶應該使用 cuFFTW 輕松地將代碼移植到 NVIDIA GPU 上,只需很少的努力。 cuFFTW 庫提供了 FFTW3 API ,以便于移植現有的 FFTW 應用程序。

cuFFTXt

要在單個節(jié)點中跨 GPU 分布 FFT 計算,請檢查 cuFFTXt 。該庫包括幫助用戶在多個 GPU 上操作數據和跟蹤數據順序的功能,從而可以以最有效的方式處理數據。

cuFFTMp

不僅在單個系統中有多 GPU 支持, cuFFTMp 提供跨多個節(jié)點的多 GPU 支持。該庫可用于任何 MPI 應用程序,因為它獨立于 MPI 實現的質量。它使用 NVSHMEM 這是一個基于 OpenSHMEM 標準的通信庫,專為 NVIDIA GPU 設計。

cuFFTDx

要通過避免不必要的全局內存訪問并允許 FFT 內核與其他操作融合來提高性能,請查看 cuFFT 設備擴展( cuFFTDx ) 作為數學庫設備擴展的一部分,它允許應用程序在用戶內核內計算 FFT 。

使用 CUDA 數學 API 優(yōu)化標準數學函數

CUDA 數學 API 是為每種 NVIDIA GPU 架構優(yōu)化的標準數學函數的集合。所有 CUDA 庫都依賴于 CUDA 數學庫。 CUDA 數學 API 支持所有 C99 標準浮點和雙精度數學函數、浮點、雙精度和全舍入模式,以及不同的函數,如三角函數和指數函數(cospi、sincos)和其他逆誤差函數(erfinv、erfcinv)。

使用帶彎刀的 C ++模板自定義代碼

矩陣乘法是許多科學計算的基礎。這些乘法在深度學習算法的有效實現中尤為重要。與庫布拉斯類似, CUDA Templates for Linear Algebra Subroutines (CUTLASS) 包含一組線性代數例程,用于執(zhí)行有效的計算和縮放。

它結合了分層分解和數據移動的策略,類似于用于實現 cuBLAS 和 cuDNN 的策略。然而,與 cuBLAS 不同的是,彎刀越來越模塊化和可重新配置。它將 GEMM 的運動部分分解為基本組件或塊,作為 C ++模板類可用,從而為您定制算法提供了靈活性。

該軟件是流水線的,以隱藏延遲并最大限度地提高數據重用。無沖突地訪問共享內存,以最大限度地提高數據吞吐量,消除內存占用,并完全按照您想要的方式設計應用程序。要了解有關使用 Cutslass 提高應用程序性能的更多信息,請參閱 CUDA C 中的快速線性代數++ 。

使用 AmgX 計算微分方程

AmgX 提供 GPU 加速的 AMG (代數多重網格)庫,在分布式節(jié)點上的單個 GPU 或多 GPU 上受支持。它允許用戶創(chuàng)建復雜的嵌套解算器、平滑器和預條件器。該庫使用不同的平滑器(如塊 Jacobi 、 Gauss-Seidel 和稠密 LU )實現了經典和基于聚合的代數多重網格方法。

該庫還包含預條件 Krylov 子空間迭代方法,如 PCG 和 BICGStab 。 AmgX 為模擬的計算密集型線性求解器部分提供高達 10 倍的加速度,非常適合隱式非結構方法。

AmgX 是專門為 CFD 應用開發(fā)的,可用于能源、物理和核安全等領域。 AmgX 庫的一個實際示例是求解小規(guī)模到大規(guī)模計算問題的泊松方程。

這個 飛蛇模擬示例 顯示了在 GPU 上使用 AmgX 包裝器加速 CFD 代碼時所花費的時間和成本的減少。與一個 12 核 CPU 節(jié)點相比,一個 K20 GPU 節(jié)點上有 300 萬個網格點,速度提高了 21 倍。

開始使用 NVIDIA 數學庫

cuBLAS 、 cuRAND 、 cuFFT 、 cuSPARSE 、 cuSOLVER 和 CUDA 數學庫都包含在 HPC SDK NVIDIA 和 CUDA 工具包

數學庫設備擴展( cuFFTDx )在 MathDx 20.22

cuTENSOR , cusPARSELt 和 MathDx 可以在上找到 開發(fā)區(qū)

AmgX 和 CUTLASS 在 GitHub 上可用

Cubrasmg 目前是 CUDA 數學庫早期訪問程序

關于作者

Aastha Jhunjhunwala 在獲得卡內基梅隆大學化學工程碩士學位后,于 2021 年作為新大學畢業(yè)生輪換計劃的一部分加入 NVIDIA。她的背景是分子動力學和機器學習。作為 NVIDIA 的解決方案架構師,她參與了醫(yī)療保健領域的 HPC 和 DL 工作流。她熱衷于人工智能在計算化學和藥物發(fā)現中的應用。

Gabrielle Talavera 是 NVIDIA 的解決方案架構師。她畢業(yè)于內華達大學里諾分校,獲得計算機科學學士學位,并于 2021 年通過新大學畢業(yè)生輪崗計劃加入 NVIDIA,專注于軟件開發(fā)、網絡和 HPC。她喜歡向其他人介紹 NVIDIA 必須提供的技術,并幫助客戶加速他們的應用程序。

審核編輯:郭婷

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

    關注

    14

    文章

    5282

    瀏覽量

    106061
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4925

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    NVIDIA CUDA深度神經網絡實現高性能GPU加速

    NVIDIA CUDA 深度神經網絡(cuDNN)是一個 GPU 加速的深度神經網絡基元,能夠以高度優(yōu)化的方式實現標準例程(如前向和反向
    發(fā)表于 07-23 11:04 ?1736次閱讀

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

    的各個方面,包括硬件支持、操作系統支持、許可證、GPU計算的啟用、NVIDIA和AMD GPU的詳細信息以及相關的使用指南和故障排除等內容。 1. 硬件支持 - NVIDIA
    發(fā)表于 12-16 14:25

    NVIDIA火熱招聘GPU高性能計算架構師

    這邊是NVIDIA HR Allen, 我們目前在上海招聘GPU高性能計算架構師(功能驗證)的崗位,有意向的朋友歡迎發(fā)送簡歷到 allelin@nvidia
    發(fā)表于 09-01 17:22

    NVIDIA-SMI:監(jiān)控GPU的絕佳起點

    nvidia-smi可執(zhí)行文件位于虛擬機管理程序上。如果在同一部署中您選擇在GPU上使用作為傳遞,那么GPU正在尋找訪客上的NVIDIA驅動
    發(fā)表于 09-04 15:18

    GPU加速XenApp/Windows 2016/Office/IE性能會提高嗎

    Shark來查看哪些程序/進程使用GPU(硬件加速)。它看起來不像Internet Explorer 11或Office 2016根本不使用GPU。我已經驗證IE和Office都啟用
    發(fā)表于 09-12 16:24

    GPU加速matlab程序

    最近遇到了一個加速matlab程序的問題,不知道如何利用GPU,以及使用GPU的先決條件,是不是GPU
    發(fā)表于 03-30 11:21

    近600個應用程序通過NVIDIA GPU實現了提速

    十幾年前,還不曾有加速應用程序。而如今已有近600個應用程序通過NVIDIA GPU實現了提速。
    的頭像 發(fā)表于 02-14 14:15 ?5265次閱讀

    VMware和Nvidia將聯手加速企業(yè)人工智能應用程序的開發(fā)

    VMware和Nvidia近日將聯手加速企業(yè)人工智能應用程序的開發(fā)。 新發(fā)布的虛擬化巨頭vSphere 7服務器虛擬化和vSAN 7存儲虛擬化產品將運行需要支持人工智能基礎設施的應用程序
    的頭像 發(fā)表于 03-19 11:29 ?2605次閱讀

    全新NVIDIA Omniverse應用程序及連接器介紹

    此次GeForce Experience更新添加了許多功能,實現一鍵優(yōu)化適用于NVIDIA GPU的頂級創(chuàng)作應用程序。 今年GTC大會推出的全新NVIDIA Omniverse
    的頭像 發(fā)表于 06-09 16:21 ?2330次閱讀

    NVIDIA CUDA Toolkit用于創(chuàng)建高性能GPU加速應用程序

    通過 CUDA Toolkit,您可以在 GPU 加速的嵌入式系統、桌面工作站、企業(yè)數據中心、基于云的平臺和 HPC 超級計算機上開發(fā)、優(yōu)化和部署應用程序
    的頭像 發(fā)表于 03-10 10:15 ?2575次閱讀

    使用NVIDIA TensorRT部署實時深度學習應用程序

    深度神經網絡 (DNN) 是實現強大的計算機視覺和人工智能應用程序的強大方法。今天發(fā)布的NVIDIA Jetpack 2.3使用 NVIDIA TensorRT (以前稱為 GPU
    的頭像 發(fā)表于 04-18 14:28 ?2512次閱讀
    使用<b class='flag-5'>NVIDIA</b> TensorRT部署實時深度學習<b class='flag-5'>應用程序</b>

    如何使用NVIDIA Docker部署GPU服務器應用程序

    管理工作流程的方式。使用 Docker ,我們可以在工作站上開發(fā)和原型化 GPU 應用程序,然后在任何支持 GPU 容器的地方發(fā)布和運行這些應用程序
    的頭像 發(fā)表于 04-27 15:06 ?3053次閱讀
    如何使用<b class='flag-5'>NVIDIA</b> Docker部署<b class='flag-5'>GPU</b>服務器<b class='flag-5'>應用程序</b>

    NVIDIA GPU助力加速先進對話式AI技術

    NVIDIA Riva 是一種 GPU 加速應用程序框架,允許公司使用視頻和語音數據,為自己的行業(yè)、產品和客戶定制最先進的對話式 AI 服務。
    的頭像 發(fā)表于 05-06 14:28 ?1906次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>GPU</b>助力<b class='flag-5'>加速</b>先進對話式AI技術

    NVIDIA cuBLAS加速BLAS的GPU設計實現

    cuBLASMg 提供了先進的多 GPU 矩陣間乘法,您可在多臺設備間以 2D 塊循環(huán)方式分發(fā)每個矩陣。cuBLASMg 目前已加入 CUDA 數學搶先體驗計劃。
    的頭像 發(fā)表于 08-07 15:46 ?1898次閱讀

    使用 NVIDIA DOCA 2.2 加速數據中心工作負載和 AI 應用程序

    NVIDIA DOCA SDK 和加速框架為開發(fā)者提供了豐富的、驅動程序和 API,以便為 NVIDIA BlueField DPU 和
    的頭像 發(fā)表于 09-05 19:40 ?940次閱讀
    使用 <b class='flag-5'>NVIDIA</b> DOCA 2.2 <b class='flag-5'>加速</b>數據中心工作負載和 AI <b class='flag-5'>應用程序</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品