为什么Python和CUDA不支持半精度复数浮点运算?

时间:2019-06-26 17:00:02

标签: numpy fft cupy half-precision-float

NumPY具有complex64对应于两个float32。

但是它也有float16,但是没有complex32。

为什么?我有涉及FFT的信号处理计算,我认为使用complex32可以,但是我不知道如何到达那里。特别是,我希望通过cupy在NVidia GPU上加快速度。

但是,在GPU上,float16似乎是slower,而不是更快。

为什么不支持和/或忽略半精度?

我们也没有complex integers的原因也是如此,因为这也可能表示opportunity for speedup

1 个答案:

答案 0 :(得分:1)

这个问题已经在CuPy仓库中提出了一段时间:

https://github.com/cupy/cupy/issues/3370

但是还没有具体的工作计划;大多数事情仍然具有探索性。

解决这个问题并不容易的原因之一是,没有numpy.complex32 dtypes我们可以直接导入(请注意,所有CuPy的dtypes都是NumPy的别名),因此当询问设备主机转移。另一件事是,没有为complex32在CPU或GPU上编写本机数学函数,因此我们将需要自己编写它们才能进行强制转换,ufunc和其他操作。在链接的问题中,有一个指向NumPy讨论的链接,我的印象是当前尚未考虑...