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