Выходы NVIDIA nvprof для FLOPS
Я вижу, что nvprof может профилировать количество флопов в ядре (используя параметры, как показано ниже). Также, когда я просматриваю документацию (здесь http://docs.nvidia.com/cuda... там говорится, что flop_count_sp - это "Число операций с плавающей запятой одинарной точности, выполненных не предикатными потоками (сложение, умножение, умножение, накопить и специальные). Каждая операция умножения накапливает 2 к счету. "
Однако когда я бегу, результат flop_count_sp
(который должен быть flop_count_sp_add
+ flop_count_sp_mul
+ flop_count_sp_special
+ 2 * flop_count_sp_fma
) Я считаю, что он не включает в суммирование значение flop_count_sp_special
,
Не могли бы вы предложить мне, что я должен использовать? Должен ли я добавить это значение к сумме flop_count_sp
или я должен рассмотреть формулу не включает в себя значение flop_count_sp_special
?
Также не могли бы вы сказать мне, что это за специальные операции?
Я использую следующую командную строку:
nvprof --metrics flops_sp --metrics flops_sp_add --metrics flops_sp_mul --metrics flops_sp_fma --metrics flops_sp_special myKernel args
куда myKernel
это имя моего ядра CUDA, которое имеет некоторые входные аргументы, заданные аргументами args.
Например, раздел моих выводов nvprof показан ниже:
==20549== Profiling result:
==20549== Metric result:
Invocations Metric Name Metric Description Min Max Avg
Device "Tesla K40c (0)"
Kernel: mykernel(float*, int, int, float*, int, float*, int*)
2 flop_count_sp Floating Point Operations(Single Precisi 70888 70888 70888
2 flop_count_sp_add Floating Point Operations(Single Precisi 14465 14465 14465
2 flop_count_sp_mul Floating Point Operation(Single Precisio 14465 14465 14465
2 flop_count_sp_fma Floating Point Operations(Single Precisi 20979 20979 20979
2 flop_count_sp_special Floating Point Operations(Single Precisi 87637 87637 87637
1 ответ
"Специальные" операции перечислены в таблице арифметической пропускной способности в Руководстве по программированию, они следующие: взаимные, rece sqrt, log, exp, sin, cos. Обратите внимание, что они менее точные (но более быстрые), чем версии по умолчанию, вы должны подписаться, используя встроенный флаг или флаг компилятора (-use_fast_math
).
Несмотря на то, что говорится в документации, кажется, что специальные операции не включены в общее количество flop_count_sp. Это ошибка в текущей версии (8.0), я подал ошибку, поэтому она должна быть исправлена в будущем выпуске (так что этот параграф будет устаревшим в какой-то момент).