CUDA поддерживает числа двойной точности с плавающей точкой?
Кроме того, каковы причины того же?
Если ваш графический процессор имеет вычислительные возможности 1.3 , вы можете выполнять двойную точность. Однако вы должны знать, что оборудование 1.3 имеет только один блок FP двойной точности на MP, который должен использоваться всеми потоками на этом MP, тогда как есть 8 FPU одинарной точности, поэтому каждый активный поток имеет свой собственный FPU одинарной точности. Другими словами, вы можете увидеть в 8 раз худшую производительность с двойной точностью, чем с одинарной точностью.
В продолжение комментариев Paul R, устройства Compute Capability 2.0 (они же Fermi) имеют значительно улучшенную поддержку двойной точности, при этом их производительность лишь вдвое ниже, чем у одинарной точности.
В этом документе Fermi whitepaper содержится более подробная информация о двойной производительности новых устройств.
Совет:
Если вы хотите использовать двойную точность, вам нужно установить архитектуру графического процессора на sm_13
(если ваш GPU поддерживает).
В противном случае он по-прежнему будет преобразовывать все двойные числа в числа с плавающей запятой и выдавать только предупреждение (как видно из поста Файи). (Очень раздражает, если вы получаете ошибку из-за этого :-) )
Флаг: -arch=sm_13