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