Почему программа 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