Как измерить FLOPS

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


person Madhumitha B    schedule 18.02.2012    source источник
comment
Вы имеете в виду IPS? IOPS - это совсем другое дело.   -  person Oliver Charlesworth    schedule 19.02.2012


Ответы (5)


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

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

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

person angainor    schedule 06.09.2012

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

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

person Bojan Nikolic    schedule 05.09.2012
comment
Спасибо, что разместили свой ответ! Не забудьте внимательно прочитать FAQ по саморекламе. Также обратите внимание, что требуется, чтобы вы публиковали отказ от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт / продукт. - person Andrew Barber; 05.09.2012

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

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

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

person Jerry Coffin    schedule 18.02.2012

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

person usr    schedule 18.02.2012

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

отраслевым стандартом измерения флопа является хорошо известный Linpack или HPL high performance linpack, попробуйте посмотреть исходный код или запустить их самостоятельно

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

person pyCthon    schedule 05.09.2012