扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

NumPy鎬庝箞涓嶤UDA闆嗘垚浣跨敤

扬州沐宇科技
2024-05-13 13:19:18
cuda, numpy

NumPy鍙互涓嶤UDA闆嗘垚浣跨敤锛岃繖鏍峰彲浠ュ埄鐢℅PU鍔犻€熻绠椼€備竴涓父瑙佺殑鏂规硶鏄娇鐢≒yCUDA搴擄紝瀹冩彁渚涗簡Python涓嶤UDA鐨勬帴鍙c€?/p>

浠ヤ笅鏄竴浜涘熀鏈楠ゆ潵鍦∟umPy涓娇鐢–UDA锛?/p>

  1. 瀹夎PyCUDA搴擄細棣栧厛闇€瑕佸畨瑁匬yCUDA搴擄紝鍙互閫氳繃pip鏉ュ畨瑁咃細
pip install pycuda
  1. 浣跨敤PyCUDA鍒涘缓CUDA鍐呭瓨瀵硅薄锛歅yCUDA鎻愪緵浜嗕竴涓被浼间簬NumPy鏁扮粍鐨勫璞★紝绉颁负GPUArray锛屽彲浠ュ湪CUDA璁惧涓婂瓨鍌ㄦ暟鎹€?/li>
import pycuda.autoinit
import pycuda.gpuarray as gpuarray

# 鍒涘缓涓€涓狽umPy鏁扮粍
a = np.array([1, 2, 3])
# 灏哊umPy鏁扮粍杞崲涓篏PUArray瀵硅薄
a_gpu = gpuarray.to_gpu(a)
  1. 缂栧啓CUDA鍐呮牳鍑芥暟锛氫娇鐢≒yCUDA鍙互缂栧啓CUDA鍐呮牳鍑芥暟锛岃繖浜涘嚱鏁板湪GPU涓婅繍琛屻€?/li>
from pycuda.compiler import SourceModule

# 缂栧啓CUDA鍐呮牳鍑芥暟
mod = SourceModule("""
    __global__ void add(int *a, int *b, int *c) {
        int idx = threadIdx.x;
        c[idx] = a[idx] + b[idx];
    }
""")
  1. 鍦℅PU涓婃墽琛孋UDA鍐呮牳鍑芥暟锛氫娇鐢≒yCUDA鍙互鍦℅PU涓婃墽琛岀紪鍐欑殑CUDA鍐呮牳鍑芥暟銆?/li>
# 鑾峰彇CUDA鍐呮牳鍑芥暟
add_func = mod.get_function("add")

# 鍒涘缓GPUArray瀵硅薄鏉ュ瓨鍌ㄧ粨鏋?/span>
c_gpu = gpuarray.empty_like(a_gpu)

# 鎵цCUDA鍐呮牳鍑芥暟
add_func(a_gpu, b_gpu, c_gpu, block=(len(a), 1, 1), grid=(1, 1))

閫氳繃浠ヤ笂姝ラ锛屼綘鍙互鍦∟umPy涓娇鐢–UDA鏉ュ姞閫熻绠椼€傞渶瑕佹敞鎰忕殑鏄紝浣跨敤GPU鍔犻€熻绠楅渶瑕佷竴瀹氱殑CUDA缂栫▼鐭ヨ瘑鍜岀粡楠岋紝浠ョ‘淇濅唬鐮佹纭笖楂樻晥鍦板湪GPU涓婅繍琛屻€?/p>

扫码添加客服微信