国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

使用Python寫(xiě)CUDA程序的方法詳細(xì)介紹

來(lái)源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-11-27 14:24:47
文檔

使用Python寫(xiě)CUDA程序的方法詳細(xì)介紹

使用Python寫(xiě)CUDA程序有兩種方式。* Numba;* PyCUDA;numbapro現(xiàn)在已經(jīng)不推薦使用了,功能被拆分并分別被集成到accelerate和Numba了。例子;numba;Numba通過(guò)及時(shí)編譯機(jī)制(JIT)優(yōu)化Python代碼,Numba可以針對(duì)本機(jī)的硬件環(huán)境進(jìn)行優(yōu)化,同時(shí)支持CPU和GPU的優(yōu)化,并且可以和Numpy集成,使Python代碼可以在GPU上運(yùn)行,只需在函數(shù)上方加上相關(guān)的指令標(biāo)記。如下所示。
推薦度:
導(dǎo)讀使用Python寫(xiě)CUDA程序有兩種方式。* Numba;* PyCUDA;numbapro現(xiàn)在已經(jīng)不推薦使用了,功能被拆分并分別被集成到accelerate和Numba了。例子;numba;Numba通過(guò)及時(shí)編譯機(jī)制(JIT)優(yōu)化Python代碼,Numba可以針對(duì)本機(jī)的硬件環(huán)境進(jìn)行優(yōu)化,同時(shí)支持CPU和GPU的優(yōu)化,并且可以和Numpy集成,使Python代碼可以在GPU上運(yùn)行,只需在函數(shù)上方加上相關(guān)的指令標(biāo)記。如下所示。

下面小編就為大家?guī)?lái)一篇使用Python寫(xiě)CUDA程序的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

使用Python寫(xiě)CUDA程序有兩種方式:

* Numba
* PyCUDA

numbapro現(xiàn)在已經(jīng)不推薦使用了,功能被拆分并分別被集成到accelerate和Numba了。

例子

numba

Numba通過(guò)及時(shí)編譯機(jī)制(JIT)優(yōu)化Python代碼,Numba可以針對(duì)本機(jī)的硬件環(huán)境進(jìn)行優(yōu)化,同時(shí)支持CPU和GPU的優(yōu)化,并且可以和Numpy集成,使Python代碼可以在GPU上運(yùn)行,只需在函數(shù)上方加上相關(guān)的指令標(biāo)記,

如下所示:

import numpy as np 
from timeit import default_timer as timer
from numba import vectorize
@vectorize(["float32(float32, float32)"], target='cuda')
def vectorAdd(a, b):
 return a + b
def main():
 N = 320000000
 A = np.ones(N, dtype=np.float32 )
 B = np.ones(N, dtype=np.float32 )
 C = np.zeros(N, dtype=np.float32 )
 start = timer()
 C = vectorAdd(A, B)
 vectorAdd_time = timer() - start
 print("c[:5] = " + str(C[:5]))
 print("c[-5:] = " + str(C[-5:]))
 print("vectorAdd took %f seconds " % vectorAdd_time)
if name == 'main':
 main()

PyCUDA

PyCUDA的內(nèi)核函數(shù)(kernel)其實(shí)就是使用C/C++編寫(xiě)的,通過(guò)動(dòng)態(tài)編譯為GPU微碼,Python代碼與GPU代碼進(jìn)行交互,如下所示:

import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
from timeit import default_timer as timer
from pycuda.compiler import SourceModule
mod = SourceModule("""
global void func(float *a, float *b, size_t N)
{
 const int i = blockIdx.x * blockDim.x + threadIdx.x;
 if (i >= N)
 {
 return;
 }
 float temp_a = a[i];
 float temp_b = b[i];
 a[i] = (temp_a * 10 + 2 ) * ((temp_b + 2) * 10 - 5 ) * 5;
 // a[i] = a[i] + b[i];
}
""")
func = mod.get_function("func") 
def test(N):
 # N = 1024 * 1024 * 90 # float: 4M = 1024 * 1024
 print("N = %d" % N)
 N = np.int32(N)
 a = np.random.randn(N).astype(np.float32)
 b = np.random.randn(N).astype(np.float32) 
 # copy a to aa
 aa = np.empty_like(a)
 aa[:] = a
 # GPU run
 nTheads = 256
 nBlocks = int( ( N + nTheads - 1 ) / nTheads )
 start = timer()
 func(
 drv.InOut(a), drv.In(b), N,
 block=( nTheads, 1, 1 ), grid=( nBlocks, 1 ) )
 run_time = timer() - start 
 print("gpu run time %f seconds " % run_time) 
 # cpu run
 start = timer()
 aa = (aa * 10 + 2 ) * ((b + 2) * 10 - 5 ) * 5
 run_time = timer() - start 
 print("cpu run time %f seconds " % run_time) 
 # check result
 r = a - aa
 print( min(r), max(r) )
def main():
 for n in range(1, 10):
 N = 1024 * 1024 * (n * 10)
 print("------------%d---------------" % n)
 test(N)
if name == 'main':
 main()

對(duì)比

numba使用一些指令標(biāo)記某些函數(shù)進(jìn)行加速(也可以使用Python編寫(xiě)內(nèi)核函數(shù)),這一點(diǎn)類(lèi)似于OpenACC,而PyCUDA需要自己寫(xiě)kernel,在運(yùn)行時(shí)進(jìn)行編譯,底層是基于C/C++實(shí)現(xiàn)的。通過(guò)測(cè)試,這兩種方式的加速比基本差不多。但是,numba更像是一個(gè)黑盒,不知道內(nèi)部到底做了什么,而PyCUDA就顯得很直觀。因此,這兩種方式具有不同的應(yīng)用:

* 如果只是為了加速自己的算法而不關(guān)心CUDA編程,那么直接使用numba會(huì)更好。

* 如果為了學(xué)習(xí)、研究CUDA編程或者實(shí)驗(yàn)?zāi)骋粋€(gè)算法在CUDA下的可行性,那么使用PyCUDA。

* 如果寫(xiě)的程序?qū)?lái)要移植到C/C++,那么就一定要使用PyCUDA了,因?yàn)槭褂肞yCUDA寫(xiě)的kernel本身就是用CUDA C/C++寫(xiě)的。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用Python寫(xiě)CUDA程序的方法詳細(xì)介紹

使用Python寫(xiě)CUDA程序有兩種方式。* Numba;* PyCUDA;numbapro現(xiàn)在已經(jīng)不推薦使用了,功能被拆分并分別被集成到accelerate和Numba了。例子;numba;Numba通過(guò)及時(shí)編譯機(jī)制(JIT)優(yōu)化Python代碼,Numba可以針對(duì)本機(jī)的硬件環(huán)境進(jìn)行優(yōu)化,同時(shí)支持CPU和GPU的優(yōu)化,并且可以和Numpy集成,使Python代碼可以在GPU上運(yùn)行,只需在函數(shù)上方加上相關(guān)的指令標(biāo)記。如下所示。
推薦度:
標(biāo)簽: 使用的 方式 編程
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top
主站蜘蛛池模板: 欧美区国产区 | 影音先锋亚洲资源 | 在线国产一区二区三区 | 午夜精品一区二区三区在线观看 | 欧美在线不卡视频 | 亚洲欧美一区二区三区九九九 | 美日韩中文字幕 | 国产精品成人一区二区 | 欧美色图亚洲自拍 | 欧美a在线观看 | 青青国产成人久久91网站站 | 精品欧美一区二区三区在线 | 久久免费精品国产72精品剧情 | 一级一级特黄女人精品毛片视频 | 一区二区三区视频在线观看 | 亚洲电影资源 | 亚洲欧洲日本在线观看 | 国产精品毛片一区二区三区 | 国产成人h片视频在线观看 国产超级乱淫片中文 | 久久国产经典 | 亚洲第一页中文字幕 | 一区二区三区欧美视频 | 日韩在线视频免费观看 | 欧美亚洲视频一区 | 91精品欧美一区二区三区 | 一区二区三区视频在线 | 国产一区二区网站 | 国产成人综合一区精品 | 成人一a毛片免费视频 | 色yeye在线观看 | 亚洲精品在线播放 | 欧美日韩1区 | 色综合91久久精品中文字幕 | 国产欧美在线观看精品一区二区 | 国产女同一区二区三区五区 | 国产成人精品久久亚洲高清不卡 | 国产区在线观看 | 欧美曰韩 | 欧美亚洲欧美 | 四虎国产精品免费久久久 | 亚欧免费视频一区二区三区 |