哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Python語(yǔ)法加速C+的數(shù)值計(jì)算

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:NVIDIA ? 2022-04-10 10:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Rob Smallshire 曾經(jīng)說(shuō)過(guò),“你可以在 C ++中編寫(xiě)更快的代碼,但是在 Python 中編寫(xiě)代碼更快?!弊詮乃l(fā)布超過(guò)十年前, CUDA 已經(jīng)給 C 和 C ++程序員提供了在 Nvidia GPU 上最大化其代碼性能的能力。

最近, CuPy 和 PyTorch 等庫(kù)允許解釋語(yǔ)言的開(kāi)發(fā)人員利用其他語(yǔ)言優(yōu)化的 CUDA 庫(kù)的速度。這些解釋語(yǔ)言有許多優(yōu)秀的特性,包括易于閱讀的語(yǔ)法、自動(dòng)內(nèi)存管理和所有函數(shù)的通用類(lèi)型。

然而,有時(shí)擁有這些功能意味著由于內(nèi)存管理和其他超出您控制范圍的因素而付出性能代價(jià)。為了節(jié)省開(kāi)發(fā)時(shí)間,性能的降低通常是值得的。不過(guò),當(dāng)性能成為一個(gè)問(wèn)題時(shí),它最終可能需要重寫(xiě)應(yīng)用程序的某些部分。

如果你仍然可以使用 C ++來(lái)獲得最大的性能,同時(shí)仍然能從解釋語(yǔ)言中獲得所有好處呢?

MatX 概述

Matx 是一個(gè)實(shí)驗(yàn)性的 GPU 加速的數(shù)值計(jì)算 C ++庫(kù),旨在跨越用戶之間可能需要的最高性能之間的差距,在所有 CUDA 庫(kù)中使用相同的簡(jiǎn)單語(yǔ)法和類(lèi)型。使用 CUDA 11.0 中添加的 C ++ 17 支持, MatX 允許您編寫(xiě)與 Python 這樣的高級(jí)語(yǔ)言相同的自然代數(shù)表達(dá)式,而不會(huì)帶來(lái)性能損失。

張量類(lèi)型

MatX 包括許多流行數(shù)學(xué)庫(kù)的接口,如 cuBLAS 、 CUTLASS 、 cuFFT 和 CUB ,但在所有這些庫(kù)中使用一種通用數(shù)據(jù)類(lèi)型(tensor_t)。這大大簡(jiǎn)化了這些庫(kù)的 API ,方法是推斷出它知道的關(guān)于張量類(lèi)型的信息,并在此基礎(chǔ)上調(diào)用正確的 API 。

下面的代碼示例顯示了一個(gè)基于 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);雖然代碼長(zhǎng)度和可讀性相似,但 A100 上的 MatX 版本比 CPU 上運(yùn)行的 NumPy 版本快約 2100 倍。與直接使用 CUDA 庫(kù)相比, MatX 版本還有許多隱藏的好處,例如類(lèi)型檢查、輸入和輸出大小檢查,以及在沒(méi)有指針操作的情況下切片張量。

不過(guò),張量類(lèi)型并不限于 FFT ,同樣的變量也可以在其他庫(kù)和表達(dá)式中使用。例如,如果您想在重采樣器輸出上使用 Cutslass 執(zhí)行 GEMM ,可以編寫(xiě)以下代碼:

matmul(resampOut, resampView, B, stream);

在這段代碼中, resampOut 和 B 是 GEMM 操作的適當(dāng)大小的張量。與前面的 FFT 示例一樣,類(lèi)型、大小、批次和步幅都由張量元數(shù)據(jù)推斷。使用強(qiáng)類(lèi)型的 C ++ API 也意味著許多運(yùn)行時(shí)和編譯時(shí)錯(cuò)誤可以在不進(jìn)行附加調(diào)試的情況下捕獲。

除了支持優(yōu)化的 CUDA 庫(kù)作為后端,這些相同的張量類(lèi)型還可以用于代數(shù)表達(dá)式中,以執(zhí)行元素操作:

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

惰性評(píng)估

MatX 使用惰性計(jì)算在編譯時(shí)創(chuàng)建一個(gè) GPU 內(nèi)核,表示括號(hào)中的表達(dá)式。只有在表達(dá)式上調(diào)用 run 函數(shù)時(shí),操作才會(huì)在 GPU 上執(zhí)行。支持 40 多種不同類(lèi)型的運(yùn)算符,可以在不同大小和類(lèi)型的張量之間混合匹配,并具有兼容的參數(shù)。如果你看一下之前作為 CUDA 內(nèi)核編寫(xiě)的表達(dá)式,它看起來(lái)像這樣:

__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]); }?

雖然前面的代碼并不復(fù)雜,但它隱藏了幾個(gè)問(wèn)題:

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

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

雖然 grid-stride loop 是一種很好的實(shí)踐,用于處理不同大小的塊和網(wǎng)格,但您仍然必須有代碼來(lái)確保在內(nèi)核啟動(dòng)期間有足夠的線程使 GPU 保持忙碌。

假設(shè)所有輸入為 1D 向量;更高的維度可能會(huì)隨著不統(tǒng)一的步伐而斷裂。

還有許多其他缺陷沒(méi)有列出,包括無(wú)法廣播不同大小的張量、不檢查大小、需要連續(xù)內(nèi)存布局等等。

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

附加 MatX 功能

MatX 的其他主要功能包括:

通過(guò)切片、克隆和置換現(xiàn)有張量創(chuàng)建零拷貝張量視圖。

支持任意維張量。

用于動(dòng)態(tài)生成數(shù)據(jù)的生成器,無(wú)需存儲(chǔ)在內(nèi)存中。常見(jiàn)的例子是創(chuàng)建線性間隔向量、漢明窗或?qū)蔷仃嚒?/p>

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

線性解算器通過(guò) cuSolver 、使用 CUB 進(jìn)行排序和掃描、使用 cuRAND 生成隨機(jī)數(shù)、減少等功能實(shí)現(xiàn)

總結(jié)

MatX 是根據(jù) BSDv3 許可證開(kāi)源的。

關(guān)于作者

Cliff Burdick 是 NVIDIA 的高級(jí)開(kāi)發(fā)技術(shù)工程師,他專注于優(yōu)化信號(hào)處理、數(shù)值計(jì)算以及 GPU 和網(wǎng)絡(luò) IO 的 GPU 代碼。

Justin Luitjens 是 NVIDIA 的高級(jí)開(kāi)發(fā)技術(shù)經(jīng)理,致力于加速 GPU 上的應(yīng)用程序。他擁有猶他大學(xué)的科學(xué)計(jì)算博士學(xué)位。

Adam Thompson 是 NVIDIA 的高級(jí)解決方案架構(gòu)師。他有信號(hào)處理方面的背景,他的職業(yè)生涯一直在參與和領(lǐng)導(dǎo)一些項(xiàng)目,這些項(xiàng)目專注于射頻分類(lèi)、數(shù)據(jù)壓縮、高性能計(jì)算、統(tǒng)計(jì)信號(hào)處理以及管理和設(shè)計(jì)針對(duì)大數(shù)據(jù)框架的應(yīng)用程序。他擁有喬治亞理工大學(xué)電子與計(jì)算機(jī)工程碩士學(xué)位和克萊姆森大學(xué)學(xué)士學(xué)位。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5682

    瀏覽量

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

    關(guān)注

    28

    文章

    5258

    瀏覽量

    136031
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4882

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    [VirtualLab] 使用Python運(yùn)行VirtualLab Fusion光學(xué)仿真

    的存檔可以從我們的網(wǎng)站上下載。 配置Python環(huán)境 確保計(jì)算機(jī)上安裝了Python*。請(qǐng)注意,應(yīng)該勾選“將python.exe添加到路徑”的選項(xiàng)進(jìn)行安裝。本用例中的說(shuō)明假定
    發(fā)表于 03-31 09:39

    如何在 VisionFive 上使用 Python 包?

    確保執(zhí)行以下步驟: 將 Fedora OS 刷新到 Micro-SD 卡中,如將 Fedora OS 刷新到 Micro-SD 卡部分中的VisionFive 單板計(jì)算機(jī)快速入門(mén)指南. 登錄
    發(fā)表于 03-30 08:28

    Termux中調(diào)試圣誕樹(shù)Python代碼

    方便調(diào)試,可安裝ipython(增強(qiáng)版交互環(huán)境): pkg install python-pip -y pip install ipython 運(yùn)行:ipython,支持語(yǔ)法高亮、自動(dòng)補(bǔ)全,調(diào)試更高
    發(fā)表于 12-09 09:02

    完成C+輪融資,芯鈦科技自研MCU芯片已成功上車(chē)

    電子發(fā)燒友網(wǎng)綜合報(bào)道 近期,國(guó)產(chǎn)汽車(chē)半導(dǎo)體企業(yè)芯鈦科技宣布完成C+輪融資,國(guó)有資本昆山國(guó)創(chuàng)與江蘇超力電器控股股東鳴泉科技共同參與本輪融資。據(jù)悉,此次融資主要用于車(chē)規(guī)芯片產(chǎn)品量產(chǎn)及全國(guó)產(chǎn)化供應(yīng)鏈建設(shè)
    發(fā)表于 11-29 14:03 ?1253次閱讀
    完成<b class='flag-5'>C+</b>輪融資,芯鈦科技自研MCU芯片已成功上車(chē)

    完成C+輪融資,芯鈦科技自研MCU芯片已成功上車(chē)

    電子發(fā)燒友網(wǎng)綜合報(bào)道 近期,國(guó)產(chǎn)汽車(chē)半導(dǎo)體企業(yè)芯鈦科技宣布完成C+輪融資,國(guó)有資本昆山國(guó)創(chuàng)與江蘇超力電器控股股東鳴泉科技共同參與本輪融資。據(jù)悉,此次融資主要用于車(chē)規(guī)芯片產(chǎn)品量產(chǎn)及全國(guó)產(chǎn)化供應(yīng)鏈建設(shè)
    的頭像 發(fā)表于 11-29 07:18 ?9646次閱讀

    請(qǐng)問(wèn)如何用C語(yǔ)言列舉當(dāng)前所有網(wǎng)口?

    何用C語(yǔ)言列舉當(dāng)前所有網(wǎng)口?
    發(fā)表于 11-25 07:23

    如何使用 ARM FPU 加速浮點(diǎn)計(jì)算?

    文件名): -none-objdump -d build-fpu.elf/usart1-test 同樣,在反匯編文件中即可找到浮點(diǎn)計(jì)算代碼: 三、使用 ARM FPU 加速浮點(diǎn)計(jì)算1. ARM
    發(fā)表于 11-19 06:51

    一文了解Mojo編程語(yǔ)言

    ,利用硬件加速提升效率。 科學(xué)計(jì)算與數(shù)據(jù)處理 高效處理大規(guī)模數(shù)值分析、基因組學(xué)數(shù)據(jù)等任務(wù)。 系統(tǒng)工具開(kāi)發(fā) 開(kāi)發(fā)操作系統(tǒng)級(jí)工具,結(jié)合 Python 的便捷性和
    發(fā)表于 11-07 05:59

    邊緣計(jì)算中的AI加速器類(lèi)型與應(yīng)用

    人工智能正在推動(dòng)對(duì)更快速、更智能、更高效計(jì)算的需求。然而,隨著每秒產(chǎn)生海量數(shù)據(jù),將所有數(shù)據(jù)發(fā)送至云端處理已變得不切實(shí)際。這正是邊緣計(jì)算中AI加速器變得不可或缺的原因。這種專用硬件能夠直接在邊緣設(shè)備上
    的頭像 發(fā)表于 11-06 13:42 ?960次閱讀
    邊緣<b class='flag-5'>計(jì)算</b>中的AI<b class='flag-5'>加速</b>器類(lèi)型與應(yīng)用

    RSA加速實(shí)現(xiàn)思路

    ,不需要反復(fù)生成,在數(shù)據(jù)流達(dá)到一定長(zhǎng)度的情況下,生成公鑰和私鑰的花費(fèi)的時(shí)間占比很小,不考慮對(duì)它們進(jìn)行加速。而實(shí)際應(yīng)用中這3個(gè)常數(shù)數(shù)值往往很大,對(duì)應(yīng)二進(jìn)制數(shù)位寬一般為1024bits,甚至更多。這就會(huì)造成
    發(fā)表于 10-28 07:28

    語(yǔ)法糾錯(cuò)和testbench的自動(dòng)生成

    在編寫(xiě)Verilog代碼時(shí),我一般都是先在編輯器上寫(xiě)完,因?yàn)榫庉嬈鱲scode或者notepad++可以提供語(yǔ)法高亮和自動(dòng)補(bǔ)全等功能,然后用仿真器跑仿真,但是在編寫(xiě)過(guò)程中不可避免的會(huì)有一些語(yǔ)法的錯(cuò)誤
    發(fā)表于 10-27 07:07

    nuclei studio生成的c語(yǔ)言文件是不支持c語(yǔ)法嗎?

    nuclei studio 生成的c語(yǔ)言文件感覺(jué)不支持c語(yǔ)法,因?yàn)閯偸褂眠@個(gè)軟件,還請(qǐng)各位大佬幫忙看看
    發(fā)表于 10-20 11:02

    踏歌智行完成超2億元C+輪融資

    近日,踏歌智行完成C+輪融資,總交易金額超2億元。本輪融資的參與方包括信泰人壽保險(xiǎn)旗下杭州盛世玉衡基金、云松投資旗下池州踏歌智行云創(chuàng)基金等。部分老股東也通過(guò)追加投資的方式參與了本輪融資。以盛世玉衡為
    的頭像 發(fā)表于 10-09 15:21 ?868次閱讀

    怎么導(dǎo)出python邊緣計(jì)算中的APP,想進(jìn)行修改又找不到源碼?

    怎么導(dǎo)出python邊緣計(jì)算中的APP,想進(jìn)行修改又找不到源碼
    發(fā)表于 08-06 07:33

    C++ 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Python是樹(shù)莓派上的首選編程語(yǔ)言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項(xiàng)目中同樣廣受歡迎且功能強(qiáng)大。那么,在樹(shù)莓派項(xiàng)目中選擇哪種語(yǔ)言更合適呢?Python因其簡(jiǎn)潔性、豐富的庫(kù)和資源而被
    的頭像 發(fā)表于 07-24 15:32 ?1087次閱讀
    <b class='flag-5'>C</b>++ 與 <b class='flag-5'>Python</b>:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?
    乌什县| 四平市| 江安县| 恩平市| 嘉祥县| 射阳县| 南宫市| 开平市| 泗洪县| 博客| 易门县| 绍兴市| 白水县| 无棣县| 外汇| 远安县| 于田县| 夏津县| 广平县| 无为县| 兴仁县| 娄烦县| 无棣县| 拉孜县| 巴彦淖尔市| 洪江市| 和田县| 宝山区| 梓潼县| 连南| 太仆寺旗| 芦山县| 山阳县| 鄂尔多斯市| 蒙自县| 家居| 四平市| 宝丰县| 孝昌县| 犍为县| 长宁县|