python平行計算 pycuda測試 對比及分析

2021-09-22 10:00:05 字數 2741 閱讀 8571

增量式學習演算法能夠同時學習網路的節點與引數,但是隨著模型結構的增長,計算成本也越來越高,有兩個途徑可以減少計算所需的時間成本:(1)研究模型劃分方法,將比較大的模型劃分成幾個較小的子模型;(2)通過提高計算機的計算能力(gpu或cpu)。tx2能夠利用cuda進行gpu平行計算,pycuda作為python的平行計算庫,可以方便的實現gpu並行加速。本文利用pycuda實現並行加速,並與numpy進行對比。

安裝、簡單使用教程請參照pycuda官網。

import pycuda.autoinit

import pycuda.driver as drv

import numpy as np

import time

from pycuda.compiler import sourcemodule

mod = sourcemodule(

'''__global__ void text_gpu(float *a , float *b, float *k, size_t n)

''')

這段**是c++核心函式,裡面定義的是gpu平行計算的主**。例如:定義兩個向量相加的核心函式

mod = sourcemodule(

"""__global__ void multiply_them(float *dest, float *a, float *b)

""")

_shared_ 變數;

定義同一block下的共享記憶體。

__syncthreads()

同步函式,當以上**在同一block裡都執行完畢後,再執行同步函式下面的**。

blockidx.x與threadidx.x

blockidx.x取block的id,threadidx.x取執行緒的id。

numpy方式一(非for迴圈)

import numpy as np

import time

a = np.random.random(

(1000,20

)).astype(np.float32)

b = np.random.random(

(1000,20

)).astype(np.float32)

tic = time.time(

)dk = a-b

dd =

[np.

sum(a**2)

for a in dk]

k1 = np.exp(

-np.array(dd)

)toc = time.time(

)print

("time cost is:"

+str

(toc-tic)

)

time cost is:0.0174951553345

numpy方式二(for迴圈)
import numpy as np

import time

a = np.random.random(

(1000,20

)).astype(np.float32)

b = np.random.random(

(1000,20

)).astype(np.float32)

defguassion_kernel

(x, u)

: d = x-u

dd =

[np.

sum(a**2)

for a in d]

return np.exp(

-sum

(dd)

)tic = time.time(

)phi_x =

for j in

range

(1000):

, b[j]))

toc = time.time(

)print

("time cost is:"

+str

(toc-tic)

)print

(phi_x)

time cost is:0.0264999866486

**列出以上三種方式的計算成本。可以看出gpu加速的計算時間成本最低,而帶for迴圈計算的計算時間成本最高。這也只是初步的對比,實際應用中,有時gpu加速並不比cpu快。當資料維度很小,況且gpu加速的預配置也是需要額外的計算量,這導致有時帶gpu加速的計算時間反而比cpu的要長。

types

gpucpu without for loop

cpu with for loop

time cost

0.00536298751831

0.0174951553345

0.0264999866486

最後應用在增量式演算法中,由於節點的個數是慢慢增加的。三種方式的計算每個迭代步的成本如下圖所示。我們發現,執行開始時,節點個較小,gpu計算時間成本比cpu要高,但是後面的,gpu與cpu(…貌似gpu也沒有很大優勢,主要是節點個數還很少,一百多個節點),我相信隨著節點的進一步增加,會更加突現出gpu的有效性。

本文介紹了pycuda,並實現了python的gpu平行計算。

python平行計算 python平行計算

0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...

平行計算模型

平行計算模型通常指從並行演算法 的設計和分析出發,將各種並行計算機 至少某一類並行計算機 的基本特徵抽象出來,形成乙個抽象的計算模型。從更廣的意義上說,平行計算模型為平行計算提供了硬體和軟體介面 在該介面的約定下,並行系統硬體設計者和軟體設計 者可以開發對並行性 的支援機制,從而提高系統的效能。有幾...

平行計算模型

平行計算指的在同一時刻存在多於乙個計算任務被執行。由於cpu主頻提高的上限,使用多核心處理器進行平行計算早已成為主流。gpu也是乙個多核心的處理器,但它的平行計算模型與多核的cpu有很大區別。我們有必要了解gpu的並計算模型。對平行計算模式進行分類是了解cpu和gpu平行計算區別的有效方式。一種分類...