Как измерить шлоп - PullRequest
       33

Как измерить шлоп

5 голосов
/ 19 февраля 2012

Как мне измерить FLOPS или IOPS ?Если я измеряю время для обычного сложения / умножения с плавающей запятой, это эквивалентно FLOPS?

Ответы [ 5 ]

4 голосов
/ 06 сентября 2012

FLOPS - это операции с плавающей запятой в секунду. Для измерения FLOPS вам в первую очередь нужен код, который выполняет такие операции. Если у вас есть такой код, вы можете измерить его время выполнения. Вы также должны суммировать или оценивать (не измерять!) Все операции с плавающей запятой и делить их на измеренное время стены. Вы должны считать все обычные операции, такие как сложения, вычитания, умножения, деления (да, хотя они медленнее и их лучше избегать, они по-прежнему FLOPs ..). Будьте осторожны, как вы считаете! То, что вы видите в своем исходном коде, скорее всего, не то, что компилятор производит после всех оптимизаций. Чтобы быть уверенным, вам, вероятно, придется взглянуть на сборку ..

FLOPS отличается от операций в секунду. Поэтому, хотя некоторые архитектуры имеют одну инструкцию MAD (умножение-и-сложение), они все равно считаются двумя FLOP. Точно так же инструкции SSE. Вы считаете их одной инструкцией, хотя они выполняют более одной FLOP.

FLOPS не совсем бессмысленны, но вы должны быть осторожны, сравнивая свои FLOPS с sb. Elses FLOPS, особенно поставщики оборудования. Например. NVIDIA обеспечивает максимальную производительность FLOPS для своих карт при условии MAD-операций. Так что, если ваш код не имеет таких, вы никогда не получите такую ​​производительность. Либо переосмыслите алгоритм, либо измените пиковые аппаратные потери в секунду на правильный коэффициент, который вам необходимо выяснить для собственного алгоритма! Например, если ваш код выполняет только умножение, вы бы поделили его на 2. Правильный подсчет может привести к тому, что ваш код станет неоптимальным и достаточно эффективным без изменения одной строки кода.

3 голосов
/ 05 сентября 2012

Вы можете использовать счетчики производительности ЦП, чтобы сам ЦП подсчитывал количество операций с плавающей запятой, которые он использует для вашей конкретной программы. Тогда это простой вопрос деления этого на время выполнения. В Linux инструменты Perf позволяют сделать это очень легко, подробности об этом можно найти в моем блоге здесь:

http://www.bnikolic.co.uk/blog/hpc-howto-measure-flops.html

2 голосов
/ 19 февраля 2012

Обычно вы используете какой-то известный тест. Такие вещи, как MIPS и megaFLOPS, не имеют большого значения для начала, и если вы не ограничите их определенными тестами, даже этот маленький смысл теряется.

Как правило, например, целочисленная скорость будет указываться в «сухих камнях MIPS», а плавающая точка в «Linpack megaFLOPS». В них «сухой камень» и «Linpack» являются названиями эталонов, используемых для измерений.

IOPS - это операции ввода-вывода. Они практически одинаковы, хотя в этом случае не так уж много соглашений о том, какие тесты использовать (хотя SPC-1 кажется довольно популярным).

1 голос
/ 05 сентября 2012

Это очень специфичный для архитектуры вопрос, для наивного / базового / начального запуска я бы порекомендовал выяснить, сколько операций умножения операций 1 требуется на вашем конкретном оборудовании, а затем выполнить большое матричное умножение, и посмотреть, сколько времени это займет.Тогда вы сможете легко оценить FLOP вашего конкретного оборудования

. Промышленный стандарт измерительных флопов - это хорошо известный Linpack или HPL высокопроизводительный linpack , попробуйте посмотреть наисточник или управление тем, кто вы есть

Я бы также назвал этот ответ отличным справочником

1 голос
/ 19 февраля 2012

FLOP не очень хорошо определены. mul FLOPS отличаются от add FLOPS. Вы должны либо придумать свое собственное определение, либо взять определение из известного теста.

...