Почему сложная арифметика с половинной точностью не поддерживается в Python и CUDA?

NumPY имеет complex64, соответствующий двум типам float32.

Но он также имеет float16, но не сложный32.

Как придешь? У меня есть расчет обработки сигналов с использованием БПФ, где я думаю, что я буду в порядке с complex32, но я не вижу, как туда добраться. В частности, я надеялся на ускорение на GPU NVidia с Cupy.

Однако, похоже, что float16 медленнее на GPU, чем быстрее.

Почему полу-точность не поддерживается и / или игнорируется?

Также связано то, почему у нас нет сложных целых чисел, поскольку это также может дать возможность для ускорения.

0 ответов

Эта проблема уже некоторое время поднимается в репозитории CuPy:

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

Но конкретного плана работы пока нет; большинство вещей по-прежнему носит исследовательский характер.

Одна из причин, по которой это нетривиально, заключается в том, что нет numpy.complex32dtype, который мы можем импортировать напрямую (обратите внимание, что все dtypes CuPy - это просто псевдонимы NumPy), поэтому при запросе передачи устройства на хост могут возникнуть проблемы. Другое дело, что нет собственных математических функций, написанных ни на CPU, ни на GPU для complex32, поэтому нам нужно будет написать их все самостоятельно, чтобы выполнять приведение, ufunc и тому подобное. В связанной проблеме есть ссылка на обсуждение NumPy, и, по моему мнению, это в настоящее время не рассматривается...

Другие вопросы по тегам