我是Numba和CUDA的新手,并做了一些测量,以便在几个基本示例中将cuda jitted函数与Numpy进行比较。例如,
@cuda.jit("void(float32[:])")
def gpu_computation(array):
pos = cuda.grid(1)
if pos < array.size:
array[pos] = array[pos] ** 2.6
与单线程相比
def cpu_computation(array):
array = array ** 2.6
return array
带
n=1000000
array = np.linspace(0, 100, num=n, dtype=np.float32)
threads per block = 32
blocks per grid = 31250
我使用GPU获得大约3倍的加速。这也是我在执行矩阵乘法时得到的(Numba文档中的基本和智能版本)。通过复制到设备进行优化并没有帮助。
预计会加速吗?我预计会有更多的数量级。我的机器:带有GeForce GTX 775M 2048 MB和CUDA 7.5.30的Mac OSX。
答案 0 :(得分:2)
GTX 775M的双精度算术吞吐量为1/24th of the single precision throughput。 由于Python没有单一的精度类型,您需要使用Numba types将数据明确标记为单精度。
不幸的是,除了使用不同的GPU(特斯拉阵容或原版,现在已经停产的GTX Titan)之外,没有办法加速双精度计算。