【问题标题】:Why is half-precision complex float arithmetic not supported in Python and CUDA?为什么 Python 和 CUDA 不支持半精度复浮点运算?
【发布时间】:2019-11-08 16:40:24
【问题描述】:

NumPY 有 complex64 对应于两个 float32。

但它也有 float16,但没有 complex32。

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

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

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

同样相关的是为什么我们没有complex integers,因为这也可能显示opportunity for speedup

【问题讨论】:

  • 你为什么期待加速?
  • 因为一半的位要推来推去。
  • 但是如果处理器(和c 代码)针对 32 位和 64 位处理进行了优化怎么办?我们大多数人不再使用 8 位处理器!
  • 关于cupy有什么没有实现,这可能只是开发优先级的问题。 cupy 仍然很新(例如,至少与 CUDA 或 numpy 相比)。您可能会以问题或拉取请求的形式向 cupy 开发人员表达您的愿望。我怀疑问一个关于 SO 的随机问题是向 Cupy 开发团队表明您的兴趣的好方法。更好的方法是直接联系他们(例如 github)并提供一个具体的例子,甚至可能是一个具体的流派,作为激励。
  • However it seems that float16 is slower on GPU rather than faster. GPU 上的 FP16 FFT 肯定有可能比相应的 F32(或 FP64)FFT 更快。当然,GPU 类型很重要。似乎您可能已经在您的 cmets 中以一种倾斜的方式指出了这一点,所以我不确定您为什么要在您的问题中保留这样的陈述而不进行编辑。所以我就把这个留给未来的读者。

标签: numpy fft cupy half-precision-float


【解决方案1】:

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

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

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

解决这个问题的原因之一是没有我们可以直接导入的numpy.complex32 dtype(请注意,所有 CuPy 的 dtype 只是 NumPy 的别名),所以当设备 -要求主机转移。另一件事是没有在 CPU 或 GPU 上为 complex32 编写本机数学函数,因此我们需要自己编写它们来进行强制转换、ufunc 等等。在链接的问题中有一个 NumPy 讨论的链接,我的印象是它目前没有被考虑......

【讨论】:

  • 我想补充一点,不过,在初步测试以支持 CuPy 中的半精度 FFT (github.com/cupy/cupy/pull/4407) 期间,我们确实看到在某些架构上可以获得预期的 2 倍加速。 @RobertCrovella 如果你能帮助我们更好地理解为什么 Pascal 在那里表现不佳,那就太好了?
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2012-10-03
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多