有没有一种方法可以指示Numba / CUDA内核自动将所有float64变量强制转换为float32?

时间:2019-07-27 14:44:15

标签: python cuda numba

我一直试图将我的C++/CUDA代码移植到Python/Numba/CUDA,但是(在GeForce GPU上)产生的性能非常糟糕。这样做的原因是,如果没有另外说明,Numba将执行float64中的所有计算。我猜这是有道理的,因为Python中的所有浮点都是64位。但是,float64数学中的商用GPU的性能非常糟糕。因此,为了提高代码的性能,我需要将其很多部分手动转换为numba.float32。这严重污染了我的代码,达到了无法接受的程度。

例如,以下代码:

@numba.cuda.jit(device=True)
def gauss_1d_pdf(x, x0, s):
    a = 1 / (s * math.sqrt(2 * math.pi))
    return a * math.exp(- (x - x0) * (x - x0) / (2 * s * s))

必须转换为:

@numba.cuda.jit('float32(float32, float32, float32)', device=True)
def gauss_1d_pdf(x, x0, s):
    a = numba.float32(1) / (s * math.sqrt(numba.float32(2) * numba.float32(math.pi)))
    return a * math.exp(- (x - x0) * (x - x0) / (numba.float32(2) * s * s))

这绝对是不能接受的。

是否有一种方法可以告诉Numba以单精度进行所有操作而不必到处发送垃圾邮件numba.float32(foo)

0 个答案:

没有答案