亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 用Numba加速Python代碼,變得像C++一樣快

用Numba加速Python代碼,變得像C++一樣快

來源:千鋒教育
發(fā)布人:wjy
時間: 2022-11-16 14:07:42 1668578862

  1.介紹

  Numba 是 python 的即時(Just-in-time)編譯器,即當(dāng)你調(diào)用 python 函數(shù)時,你的全部或部分代碼就會被轉(zhuǎn)換為“即時”執(zhí)行的機(jī)器碼,它將以你的本地機(jī)器碼速度運(yùn)行!它由 Anaconda 公司贊助,并得到了許多其他組織的支持。

  在 Numba 的幫助下,你可以加速所有計算負(fù)載比較大的 python 函數(shù)(例如循環(huán))。它還支持 numpy 庫!所以,你也可以在你的計算中使用 numpy,并加快整體計算,因為 python 中的循環(huán)非常慢。你還可以使用 python 標(biāo)準(zhǔn)庫中的 math 庫的許多函數(shù),如 sqrt 等。有關(guān)所有兼容函數(shù)的完整列表,請查看 此處。

  2.為什么選擇 Numba?

  那么,當(dāng)有像 cython 和 Pypy 之類的許多其他編譯器時,為什么要選擇 numba?

  原因很簡單,這樣你就不必離開寫 python 代碼的舒適區(qū)。是的,就是這樣,你根本不需要為了獲得一些的加速來改變你的代碼,這與你從類似的具有類型定義的 cython 代碼獲得的加速相當(dāng)。那不是很好嗎?

  你只需要添加一個熟悉的 python 功能,即添加一個包裝器(一個裝飾器)到你的函數(shù)上。類的裝飾器也在開發(fā)中了。

  所以,你只需要添加一個裝飾器就可以了。例如:

用Numba加速Python代碼1

  這仍然看起來像一個原生 python 代碼,不是嗎?

  3.如何使用 Numba?

  Numba 使用 LLVM 編譯器基礎(chǔ)結(jié)構(gòu) 將原生 python 代碼轉(zhuǎn)換成優(yōu)化的機(jī)器碼。使用 numba 運(yùn)行代碼的速度可與 C/C++ 或 Fortran 中的類似代碼相媲美。

  以下是代碼的編譯方式:

用Numba加速Python代碼2

  首先,Python 函數(shù)被傳入,優(yōu)化并轉(zhuǎn)換為 numba 的中間表達(dá),然后在類型推斷(type inference)之后,就像 numpy 的類型推斷(所以 python float 是一個 float64),它被轉(zhuǎn)換為 LLVM 可解釋代碼。然后將此代碼提供給 LLVM 的即時編譯器以生成機(jī)器碼。

  你可以根據(jù)需要在運(yùn)行時或?qū)霑r 生成 機(jī)器碼,導(dǎo)入需要在 CPU(默認(rèn))或 GPU 上進(jìn)行。

  4.使用 numba 的基本功能

  (只需要加上 @jit !)

  為了獲得最佳性能,numba 實際上建議在你的 jit 裝飾器中加上 nopython=True 參數(shù),加上后就不會使用 Python 解釋器了。或者你也可以使用 @njit。如果你加上 nopython=True的裝飾器失敗并報錯,你可以用簡單的 @jit 裝飾器來編譯你的部分代碼,對于它能夠編譯的代碼,將它們轉(zhuǎn)換為函數(shù),并編譯成機(jī)器碼。然后將其余部分代碼提供給 python 解釋器。

  所以,你只需要這樣做:

用Numba加速Python代碼3

  當(dāng)使用 @jit 時,請確保你的代碼有 numba 可以編譯的內(nèi)容,比如包含庫(numpy)和它支持的函數(shù)的計算密集型循環(huán)。否則它將不會編譯任何東西,并且你的代碼將比沒有使用 numba 時更慢,因為存在 numba 內(nèi)部代碼檢查的額外開銷。

  還有更好的一點是,numba 會對首次作為機(jī)器碼使用后的函數(shù)進(jìn)行緩存。因此,在第一次使用之后它將更快,因為它不需要再次編譯這些代碼,如果你使用的是和之前相同的參數(shù)類型。

  如果你的代碼是 可并行化 的,你也可以傳遞 parallel=True 作為參數(shù),但它必須與 nopython=True 一起使用,目前這只適用于CPU。

  你還可以指定希望函數(shù)具有的函數(shù)簽名,但是這樣就不會對你提供的任何其他類型的參數(shù)進(jìn)行編譯。例如:

用Numba加速Python代碼4

  現(xiàn)在你的函數(shù)只能接收兩個 int32 類型的參數(shù)并返回一個 int32 類型的值。通過這種方式,你可以更好地控制你的函數(shù)。如果需要,你甚至可以傳遞多個函數(shù)簽名。

用Numba加速Python代碼5

  你還可以使用 numba 提供的其他裝飾器:

  @vectorize:允許將標(biāo)量參數(shù)作為 numpy 的 ufuncs 使用,

  @guvectorize:生成 NumPy 廣義上的 ufuncs,

  @stencil:定義一個函數(shù)使其成為 stencil 類型操作的核函數(shù)

  @jitclass:用于 jit 類,

  @cfunc:聲明一個函數(shù)用于本地回調(diào)(被C/C++等調(diào)用),

  @overload:注冊你自己的函數(shù)實現(xiàn),以便在 nopython 模式下使用,例如:@overload(scipy.special.j0)。

  Numba 還有 Ahead of time(AOT)編譯,它生成不依賴于 Numba 的已編譯擴(kuò)展模塊。但:

  它只允許常規(guī)函數(shù)(ufuncs 就不行),

  你必須指定函數(shù)簽名。并且你只能指定一種簽名,如果需要指定多個簽名,需要使用不同的名字。

  它還根據(jù)你的CPU架構(gòu)系列生成通用代碼。

  5.@vectorize 裝飾器

  通過使用 @vectorize 裝飾器,你可以對僅能對標(biāo)量操作的函數(shù)進(jìn)行轉(zhuǎn)換,例如,如果你使用的是僅適用于標(biāo)量的 python 的 math 庫,則轉(zhuǎn)換后就可以用于數(shù)組。這提供了類似于 numpy 數(shù)組運(yùn)算(ufuncs)的速度。例如:

用Numba加速Python代碼6

  你還可以將 target 參數(shù)傳遞給此裝飾器,該裝飾器使 target 參數(shù)為 parallel 時用于并行化代碼,為 cuda 時用于在 cudaGPU 上運(yùn)行代碼。

用Numba加速Python代碼7

  使 target=“parallel” 或 “cuda” 進(jìn)行矢量化通常比 numpy 實現(xiàn)的代碼運(yùn)行得更快,只要你的代碼具有足夠的計算密度或者數(shù)組足夠大。如果不是,那么由于創(chuàng)建線程以及將元素分配到不同線程需要額外的開銷,因此可能耗時更長。所以運(yùn)算量應(yīng)該足夠大,才能獲得明顯的加速。

用Numba加速Python代碼8

  這個視頻講述了一個用 Numba 加速用于計算流體動力學(xué)的Navier Stokes方程的例子:

  6.在GPU上運(yùn)行函數(shù)

  你也可以像裝飾器一樣傳遞 @jit 來運(yùn)行 cuda/GPU 上的函數(shù)。為此你必須從 numba 庫中導(dǎo)入 cuda。但是要在 GPU 上運(yùn)行代碼并不像之前那么容易。為了在 GPU 上的數(shù)百甚至數(shù)千個線程上運(yùn)行函數(shù),需要先做一些初始計算。實際上,你必須聲明并管理網(wǎng)格,塊和線程的層次結(jié)構(gòu)。這并不那么難。

  要在GPU上執(zhí)行函數(shù),你必須定義一個叫做 核函數(shù) 或 設(shè)備函數(shù) 的函數(shù)。首先讓我們來看 核函數(shù)。

  關(guān)于核函數(shù)要記住一些要點:

  核函數(shù)在被調(diào)用時要顯式聲明其線程層次結(jié)構(gòu),即塊的數(shù)量和每塊的線程數(shù)量。你可以編譯一次核函數(shù),然后用不同的塊和網(wǎng)格大小多次調(diào)用它。

  核函數(shù)沒有返回值。因此,要么必須對原始數(shù)組進(jìn)行更改,要么傳遞另一個數(shù)組來存儲結(jié)果。為了計算標(biāo)量,你必須傳遞單元素數(shù)組。

用Numba加速Python代碼9

  因此,要啟動核函數(shù),你必須傳入兩個參數(shù):

  每塊的線程數(shù),

  塊的數(shù)量。

  例如:

用Numba加速Python代碼10

  每個線程中的核函數(shù)必須知道它在哪個線程中,以便了解它負(fù)責(zé)數(shù)組的哪些元素。Numba 只需調(diào)用一次即可輕松獲得這些元素的位置。

用Numba加速Python代碼11

  為了節(jié)省將 numpy 數(shù)組復(fù)制到指定設(shè)備,然后又將結(jié)果存儲到 numpy 數(shù)組中所浪費(fèi)的時間,Numba 提供了一些 函數(shù) 來聲明并將數(shù)組送到指定設(shè)備,如:numba.cuda.device_array,numba.cuda。device_array_like,numba.cuda.to_device 等函數(shù)來節(jié)省不必要的復(fù)制到 cpu 的時間(除非必要)。

  另一方面,設(shè)備函數(shù) 只能從設(shè)備內(nèi)部(通過核函數(shù)或其他設(shè)備函數(shù))調(diào)用。比較好的一點是,你可以從 設(shè)備函數(shù) 中返

用Numba加速Python代碼12

  你還應(yīng)該在這里查看 Numba 的 cuda 庫支持的功能。

  Numba 在其 cuda 庫中也有自己的原子操作,隨機(jī)數(shù)生成器,共享內(nèi)存實現(xiàn)(以加快數(shù)據(jù)的訪問)等功能。

  ctypes/cffi/cython 的互用性:

  cffi – 在 nopython 模式下支持調(diào)用 CFFI 函數(shù)。

  ctypes – 在 nopython 模式下支持調(diào)用 ctypes 包裝函數(shù)。

  Cython 導(dǎo)出的函數(shù)是 可調(diào)用的。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
狠狠躁夜夜躁人妻蜜臂AV| 好爽…又高潮了免费毛片| 国内精品久久久人妻中文字幕| 黑人人妻AV一区二区三| 久久久久久精品免费免费HD| 男生坤坤放在女生坤坤叫什么| 人妻熟妇乱又伦精品HD| 我和亲妺妺乱的性视频| 亚洲欧美VR色区| 7M精品福利视频导航| 粗大的内捧猛烈进出| 国内精品久久久久久不卡影院| 久久婷婷五月综合色国产免费观看| 欧美日韩精品SUV| 手机看片福利永久| 亚洲人成人无码一区二区三区| 97国语精品自产拍在线观看一| 国产AV激情无码久久| 精品人在线二线三线区别| 欧产日产国产精品精品| 玩弄三个高大的熟妇| 一面膜上边一面膜下边韩国 | 精品国产熟女成人AV| 免费无码不卡视频在线观看| 他的白月光H1∨1笔趣阁| 亚洲日韩国产一区二区三区在线 | 国产成人18黄网站免费观看| 久久精品AⅤ无码中文字字幕重口 久久精品AⅤ无码中文字字幕蜜桃 | 少妇高潮呻吟在线观看| 亚洲精品一品区二品区三品区| FREE性欧美HD另类精品| 国内精品视频一区二区三区| 欧美激情000ⅩXX同性| 午夜成人无码福利免费视频| 44分钟欧美人与禽交片MP4| 国产精品国产三级欧美二区| 免费看成人A级毛片| 无人区一码二码三码区别在哪| 中国老太卖婬HD播放| 国产成人亚洲精品| 两性午夜刺激性视频2345| 天天狠天天透天天伊人| 中国少妇BBWBBW| 国产精品免费_区二区三区观看| 免费男人下部进女人下部视频| 无码任你躁久久久久久老妇| 50岁人妻丰满熟妇ΑV无码区 | 无码日韩人妻AV一区二区三区| 在线天天看片视频免费观看| 国产精品久线在线观看| 欧美丰满美乳XXⅩ高潮| 亚洲国产精品久久久久婷婷图片 | 人妻丰满熟AV无码区HD| 亚洲欧美日韩精品久久亚洲区| 吃奶呻吟打开双腿做受视频| 久拍国产在线观看| 无人区一码卡二卡三乱码 | 欧美最猛黑人XXXX黑人猛交9| 亚洲成AV人在线视达达兔| 成午夜福利人试看120秒 | 又粗又硬又黄A级毛片| 国产男男Gay做受×Xx男| 欧美色欧美亚洲高清在线观看| 亚洲精品无码GV在线观看| 公和熄小婷乱中文字幕| 女士不遮阴小内搭| 我把护士日出水了视频90分钟| 久久国产精品香蕉成人APP | 黑人VIDEODESEXO极品| 日本一二三区视频在线| 中国熟妇内谢69XXXXX| 国精产品一品二品国精HTC| 日韩一区二区三区无码免费视频| 中文字幕人妻无码专区APP | 亚洲色AV无码AV丰满AV| 国产精品久久久久永久免费看| 欧美性XXXXX极品娇小| 一区二区清无吗视频| 国外亚洲成AV人片在线观看| 视频在线观看一区二区| x88AV在线观看ww| 鲁大师在线观看视频在线播放| 亚洲AV无码一区二区三区性色| 嗯啊开小嫩苞好深啊H视频| 欧美黑人一级爽快片婬片高清| 亚洲综合AV永久无码精品一区二| 国产一区二区三区导航 | 国产AV大学生第一次破| 秋霞鲁丝片AⅤ无码入口| 影音先锋亚洲无码资源网| 极品VPSWINDOWS少妇| 西西人体午夜大胆无码视频| 野花电影在线观看免费720| 麻花豆传媒剧国产MV在线| 糖心VLOG肉丝库水柚子猫| 被公疯狂进入的美丽人妻| 免费一区二区三区成人免费视频| 亚洲综合激情七月婷婷| 精品熟女少妇AⅤ免费久久| 久久精品国产亚洲AV无码麻豆| 无码视频免费一区二区三区| 贵阳40多岁熟女高潮呻吟| 日韩AV无码一区二区三区| JAVASCRIPTJAVA成熟亲子| 男人边吃奶边揉好爽免费视频| 越南少妇BBV叉叉叉| 久久久久亚洲精品男人的天堂| 亚洲欧美成人一区二区三区| 精品国产AV一区二区三区| 亚洲H在线播放在线观看H| 国内精品久久久久久久久齐齐 | 国产亚洲AV综合人人澡精品 | 国产女人高潮视频在线观看 | 在床上拔萝卜又疼又叫什么病| 久久久久久精品成人免费| 亚洲国产精品久久久久4婷婷| 国内久久婷婷五月综合欲色广啪| 亚洲AV成人无码天堂| 国产制服丝袜在线无码| 亚洲AV无码一区二区乱子仑| 好爽好紧好大的免费视频国产 | 99久久人妻无码中文字幕系列| 免费无码AV片在线观看中文 | 年轻老师的滋味3在观整有限中字| 在线看片无码永久免费视频| 乱人伦人妻中文字幕不卡| 中文字幕精品亚洲人成在线 | CHINESE熟女老女人HD,| 人妻AV一区二区三区| 超高清欧美VIDEOSSEXO| 日韩人妻无码精品免费SHIPI| 饭桌上故意张开腿让公在线观看| 少女たちよ观看动漫| 国产精品免费观看调教网| 亚洲AⅤ永久无码精品AA| 精产国品一二三产区M553麻豆| 亚洲熟妇色ⅩXXXX日本| 老师你乖乖的可以让你少吃点苦头 | 熟妇人妻av无码一区二区三区 | 蜜桃精品欧美一区二区三区| 97久久综合亚洲色HEZYO| 人妻AV中文字幕无码专区| 粗大的内捧猛烈进出视频| 玩弄少妇秘书人妻系列| 国自产拍亚洲免费视频| 亚洲精品国产精品乱码视色| 老司机久久99久久精品播放| 99久热RE在线精品99 6热| 日韩AV影院在线观看| 国产传媒精品1区2区3区 | AⅤ精品一区二区三区| 日韩爆乳一区二区无码| 国产精品一区二区久久国产| 亚洲男人的天堂AV手机在线观看| 久久综合九色综合欧美98| CSGO大姐姐AWP多少钱| 色综合久久婷婷88| 国产作爱视频免费播放| 影音先锋亚洲AV少妇熟女| 欧美一区二区三区孕妇精品| 东京热人妻中文无码AV| 性做久久久久久免费观看| 久久久久无码国产精品不卡| CSGO大姐姐AWP多少钱| 图片区小说区激情区偷拍区| 精品人妻无码区在线视频| 99国产欧美久久久精品蜜桃| 色欲aⅴ精品一区二区三区浪潮| 国精产品999永久中国有限公司| 一面亲上边一面膜的免费| 人妻免费一区二区三区最新| 国产男男Gay做受ⅩXX高潮| 一区二区AV在线| 日产精品一二三区| 韩漫漫画登录页面入口弹窗秋蝉张| 制服丝袜人妻中文字幕在线| 日日玩日日摸日日上| 狠狠躁夜夜躁人爽碰88A| 91精品人妻一区二区三区蜜蜜挑 | 亚洲中文字幕无码专区| 欧美午夜性春猛交XXX| 国产精品亚洲A∨天堂| 影音先锋手机AV资源站| 色狠狠AV一区二区三区| 精品人妻少妇敕草AV无码专区 | 少妇无码太爽了不卡视频在线看| 精产国品一二三产品区别在 | 日韩欧无码一二三区免费不卡| 国产亚洲精品第一综合| 337P粉嫩大胆噜噜噜| 无码国产精品一区二区免费式直播| 久久久久久久久精品无码中文字幕| 白种女BBWBBWBBW| 亚洲精品卡一卡三卡四卡乱码| 欧美亚洲精品SUV| 黑料不打烊吃瓜爆料| 啊灬啊灬别停啊灬用力啊免费| 亚洲成A人片在线观看无码专区| 亲孑伦视频一区二区三区视频| 好男人日本社区WWW|