发布日期:2023年12月18日 要在Python中调用CUDA,你可以使用CUDA Python库,如PyCUDA或Numba。这些库允许你直接从Python代码中使用CUDA功能。 下面是使用PyCUDA和Numba进行CUDA编程的简要概述: PyCUDA: PyCUDA是一个用于CUDA编程的Python库,它提供了与CUDA运行时API的直接接口。要使用PyCUDA,你需要先安装它并编写CUDA C/C++代码,然后使用PyCUDA将其包装成Python可调用的函数。 以下是一个简单的示例,演示如何使用PyCUDA将两个向量相加: python复制代码 Numba: Numba是一个用于科学计算的Python库,它可以将Python代码动态编译为优化的机器代码,并支持CUDA编程。使用Numba进行CUDA编程相对简单,你只需使用Numba的装饰器来标记需要在GPU上运行的函数即可。 以下是一个使用Numba进行向量相加的示例: python复制代码 这些示例演示了如何使用PyCUDA和Numba进行简单的CUDA编程。你可以根据自己的需求选择适合的库,并根据具体的任务编写更复杂的CUDA代码。import pycuda.driver as drv import pycuda.autoinit from pycuda.compiler import SourceModule # CUDA C/C++ 代码 mod = SourceModule(""" __global__ void add_kernel(float *a, float *b, float *c) { int i = threadIdx.x; c[i] = a[i] + b[i]; } """) # 获取CUDA函数 add_kernel = mod.get_function("add_kernel") # 准备数据 n = 100000 a = drv.mem_alloc(n * 4) # 分配内存 b = drv.mem_alloc(n * 4) c = drv.mem_alloc(n * 4) # 将数据从主机复制到设备 drv.memcpy_htod(a, range(n)) drv.memcpy_htod(b, range(n)) # 调用CUDA函数 add_kernel(a, b, c, block=(n, 1, 1)) # 将结果从设备复制回主机 result = drv.memcpy_dtoh(c) # 打印结果 print(result[:10]) # 打印前10个结果 import numpy as np from numba import cuda, vectorize # 使用Numba的装饰器将函数标记为CUDA函数 @vectorize(['float32(float32, float32)'], target='cuda') def add(a, b): return a + b # 准备数据 n = 100000 a = np.arange(n, dtype=np.float32) b = np.arange(n, dtype=np.float32) c = np.empty_like(a) # 将数据从主机传输到设备 a_device = cuda.to_device(a) b_device = cuda.to_device(b) c_device = cuda.device_array_like(a) # 调用CUDA函数进行计算 add(a_device, b_device, out=c_device) # 将结果从设备传输回主机 c = c_device.copy_to_host() # 打印结果 print(c[:10]) # 打印前10个结果