簡體   English   中英

PyCuda-如何在內核中使用以Python編寫的函數?

[英]PyCuda - How can I use functions written in Python in the kernel?

我想並行化我的Python代碼,並且嘗試使用PyCuda。 到目前為止,我所看到的是您必須在C代碼中編寫一個“內核”。 該內核將要並行化。 我對嗎? 示例(從https://documen.tician.de/pycuda/tutorial.html將隨機數數組加倍):

import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule
import numpy
a = numpy.random.randn(4, 4)
a = a.astype(numpy.float32)
a_gpu = cuda.mem_alloc(a.nbytes)
cuda.memcpy_htod(a_gpu, a)
# Kernel:
mod = SourceModule("""
  __global__ void doublify(float *a)
  {
    int idx = threadIdx.x + threadIdx.y*4;
    a[idx] *= 2;
  }
  """)
func = mod.get_function("doublify")
func(a_gpu, block=(4, 4, 1))
a_doubled = numpy.empty_like(a)
cuda.memcpy_dtoh(a_doubled, a_gpu)

print(a_doubled)
print(a)

關鍵是我的Python代碼具有所有適合Python且不適合C的類和其他內容(即不可翻譯為C)。

讓我澄清一下:我有256個要並行化的獨立for循環。 這些循環包含無法轉換為C的Python代碼。

如何在不將我的代碼轉換為C的情況下將實際的Python代碼與PyCuda並行化?

你不能

PyCUDA不支持設備端python,所有設備代碼都必須用CUDA C語言編寫。

Numba包含一個直接的Python編譯器,該編譯器可以編譯極其有限的Python語言功能子集並直接在GPU上運行。 這不包括訪問任何Python庫,例如numpy,scipy等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM