[英]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.