Почему программа CUDA float работает быстрее в режиме FP64 с полной скоростью?

В моей программе CUDA используются только теги float, int, short и char. Ни один из входных или выходных массивов не имеет элементов типа double. И ни один из ядер не создает во всех вычислениях тип double внутри них.

Эта программа была скомпилирована с использованием CUDA SDK 5.5 в режиме Release с использованием NSight Eclipse. Типичная строка компиляции выглядит так:

nvcc -O3 -gencode arch=compute_35,code=sm_35 -M -o "src/foo.d" "../src/foo.cu"

Я запускаю эту программу на GTX Titan в Linux. К моему удивлению, я заметил, что эта программа работает на 10% быстрее, когда я включаю полноскоростной режим FP64 на Titan. Это можно сделать, включив опцию CUDA Double Precision в программе настройки сервера NVIDIA X.

В то время как я рад этому бесплатному бонусу за скорость, я хотел бы узнать причины, по которым плавающая программа CUDA может ускориться в режиме FP64?

Ответ 1

Я предполагаю, что когда вы включаете полноскоростной режим FP64 на Titan, в вычислениях начинают участвовать более вычислительные единицы, и эти вычислительные единицы FP64 могут использоваться для вычисления FP32. Но включение большого количества блоков FP64 также замедляет работу часов, поэтому вычисления становятся быстрее всего на 10%.

Как получить 10%? Когда Titan работает в режиме 1/24 FP64, он работает на частоте 837 МГц. Когда он работает в режиме 1/3 FP64, он работает на частоте 725 МГц. Итак, (1 + 1/3)/(1 + 1/24) * 725/837 = 1.109.

Ссылки: http://www.anandtech.com/show/6760/nvidias-geforce-gtx-titan-part-1/4

Я нашел подтверждение своей догадки.

"Что еще, блок CUDA FP64 имеет очень высокий уровень выполнения: 1/1 FP32."

Ссылка http://www.anandtech.com/show/5699/nvidia-geforce-gtx-680-review/2

Эта информация для GK104, Titan имеет GK110. Но это одна архитектура. Поэтому я думаю, что у GK110 также есть такая возможность.

Ответ 2

Карты Titan по умолчанию имеют реализацию FP64 "capped" , которая была выполнена в основном из-за соображений энергоэффективности и тактовой частоты.

NVIDIA преднамеренно решила не включать это по умолчанию и вместо этого позволить вам управлять поведением, установив FP64 на полной скорости (1/3 FP32) или уменьшенной скоростью (1/24 FP32).

Ссылки: http://www.anandtech.com/show/6760/nvidias-geforce-gtx-titan-part-1/4