Почему сложная арифметика с половинной точностью не поддерживается в Python и CUDA?
NumPY имеет complex64, соответствующий двум типам float32.
Но он также имеет float16, но не сложный32.
Как придешь? У меня есть расчет обработки сигналов с использованием БПФ, где я думаю, что я буду в порядке с complex32, но я не вижу, как туда добраться. В частности, я надеялся на ускорение на GPU NVidia с Cupy.
Однако, похоже, что float16 медленнее на GPU, чем быстрее.
Почему полу-точность не поддерживается и / или игнорируется?
Также связано то, почему у нас нет сложных целых чисел, поскольку это также может дать возможность для ускорения.
0 ответов
Эта проблема уже некоторое время поднимается в репозитории CuPy:
https://github.com/cupy/cupy/issues/3370
Но конкретного плана работы пока нет; большинство вещей по-прежнему носит исследовательский характер.
Одна из причин, по которой это нетривиально, заключается в том, что нет
numpy.complex32
dtype, который мы можем импортировать напрямую (обратите внимание, что все dtypes CuPy - это просто псевдонимы NumPy), поэтому при запросе передачи устройства на хост могут возникнуть проблемы. Другое дело, что нет собственных математических функций, написанных ни на CPU, ни на GPU для
complex32
, поэтому нам нужно будет написать их все самостоятельно, чтобы выполнять приведение, ufunc и тому подобное. В связанной проблеме есть ссылка на обсуждение NumPy, и, по моему мнению, это в настоящее время не рассматривается...