Выходы 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), я подал ошибку, поэтому она должна быть исправлена ​​в будущем выпуске (так что этот параграф будет устаревшим в какой-то момент).

Другие вопросы по тегам