Плавная точка с двойной точностью в 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