PyCuda學習一之 Helloword

2021-09-25 16:11:29 字數 1860 閱讀 3180

安裝網上有教程,ps: 如果是win系統的話, 最好先安裝vs, 在安裝cuda

匯入必要的庫

import pycuda.driver as cuda

import pycuda.autoinit

from pycuda.compiler import sourcemodule

建立乙個4*4的陣列, 並且轉換成float型別(若顯示卡支援計算double型別的浮點數可不進行轉換)

import numpy as np

a = np.random.randn(4,

4).astype(np.float32)

申請a陣列大小的顯示卡空間,並將陣列a複製到顯示卡裡面

a_gpu = cuda.mem_alloc(a.nbytes)

cuda.memcpy_htod(a_gpu, a)

編寫核心函式 下面的threadidx.x, threadidx.y, blockdim都是cuda中的關鍵字,有固定的用法可參考這篇blog

mod = sourcemodule(

""" __global__ void doublify(float *a)

""")

向核函式裡面傳入a_gpu陣列, 並且呼叫核函式進行進行計算

func = mod.get_function(

'doublify'

)func(a_gpu, block=(4

,4,1

))

取出計算結果並列印

a_doubled = np.empty_like(a)

cuda.memcpy_dtoh(a_doubled, a_gpu)

print

(a_doubled)

# 計算結果

print

(a)# 原本的

所有的**

import pycuda.driver as cuda

import pycuda.autoinit

from pycuda.compiler import sourcemodule

import numpy as np

# 隨機建立乙個4*4的陣列

a = np.random.randn(4,

4)# 將雙精度浮點數轉換成單精度浮點數

a = a.astype(np.float32)

# 顯示卡中分配一段視訊記憶體 a.nbytes是陣列a的大小

a_gpu = cuda.mem_alloc(a.nbytes)

#把生成的陣列a轉移到顯示卡裡面

cuda.memcpy_htod(a_gpu, a)

# 執行乙個核心函式(kernel)

mod = sourcemodule(

""" __global__ void doublify(float *a)

""")

# 把顯示卡中陣列a_gpu作為引數傳過去,同時設定塊大小為4*4

func = mod.get_function(

"doublify"

)func(a_gpu, block=(4

,4,1

))# 建立乙個空的陣列

a_doubled = np.empty_like(a)

# 將gpu中的陣列a_gpu取回放入a_doubled中

cuda.memcpy_dtoh(a_doubled, a_gpu)

print

(a_doubled)

print

(a)

pycuda 一些計算函式

評估gpuarray例項上涉及的表示式可能有些低效,因為為每個中間結果建立了乙個新的臨時表。模組pycuda.elementwise中的功能包含有助於生成核心的工具,這些核心在一次傳遞中評估乙個或多個運算元上的多階段表示式。classpycuda.elementwise.elementwiseker...

Linux驅動篇之hello

一 環境 a ubuntu18.04 b arm linux gnueabi gcc 7.5.0 gcc 7.5.0 c friendlyarm tiny4412 標準版 d linux 5.5 二 目標 a hello驅動 b hello應用 三 步驟 a hello驅動 1 在drivers目錄...

HELLO一 如何開始DSP的學習

by eys417 摘錄一些,分享下.以下為各學習dsp的一些經驗 fxw451 大家先大體上看一遍書,把大體的知識了解一下。其次就是看例子了,例子是關鍵,例子裡有你學的所有的東西,這次你再拿出一本書來看,這次是有針對性的看,比如你做的spi的,你就直接看spi那張,一邊看例子一邊看書,這樣你就可以...