Что такое флопс, и действительно ли это - хорошая мера производительности?

41
задан osgx 23 March 2011 в 02:42
поделиться

7 ответов

Это - довольно достойная мера производительности, пока Вы понимаете точно, что это измеряет.

флопс, поскольку имя подразумевает Операции в секунду С плавающей точкой, точно что составляет ПЕРЕБРОС, мог бы варьироваться ЦП. (Некоторый ЦП может выполнить дополнение и умножение как одна операция, другие не могут, например). Это означает, что как критерий качества работы, это справедливо близко к аппаратным средствам, что означает, что 1) необходимо знать, что аппаратные средства вычисляют идеального флопс на данной архитектуре, и необходимо знать, что алгоритм и реализация выясняют, из скольких операции в секунду с плавающей точкой это на самом деле состоит.

В любом случае, это - полезный инструмент для исследования, как хорошо Вы используете ЦП. Если Вы знаете теоретическую пиковую производительность ЦП во флопс, можно разработать, как эффективно Вы используете сопроцессоры для операций с плавающей точкой ЦП, которые часто являются одним из твердых для использования эффективно. Программа, которая выполняет 30% флопс ЦП, способна к, имеет пространство для оптимизации. Тот, который достигает 70%, вероятно, не собирается становиться намного более эффективным, если Вы не изменяете основной алгоритм. Для тяжелых математикой алгоритмов как Ваши, которые являются в значительной степени стандартным способом измерить уровень. Вы могли просто иметь размеры, сколько времени программа берет для выполнения, но это варьируется дико в зависимости от ЦП. Но если Ваша программа будет иметь 50%-ю загрузку ЦП (относительно пикового количества флопс), который является несколько большим количеством постоянной величины (то это будет все еще варьироваться между радикально различными архитектурами ЦП, но это намного более последовательно, чем время выполнения).

, Но зная, что "Мой ЦП способен к X гигафлопс, и я только на самом деле достигаю пропускной способности, скажем, 20% тот", очень ценная информация в высокоэффективном программном обеспечении. Это означает, что что-то другой , чем операция в секунду с плавающей точкой сдерживает Вас и препятствует тому, чтобы единицы FP работали эффективно. И так как единицы FP составляют объем работы, которая означает, что Ваше программное обеспечение имеет проблему.

легко измерить "Мои прогоны программы за X минут", и если Вы чувствуете, что это недопустимо тогда уверенное, можно пойти, "Интересно, могу ли я прервать 30% прочь тот", но Вы не делаете , знают , если это возможно, если Вы не удаетесь точно, сколько работы делается, и точно к чему ЦП способен на пике. Сколько времени Вы хотите провести оптимизацию этого, если Вы даже не знаете, существенно способен ли ЦП больше к выполнению инструкций в секунду?

очень легко препятствовать тому, чтобы единица FP ЦП была использована эффективно при наличии слишком многих зависимостей между операцией в секунду FP, или при наличии слишком многих ответвлений или подобном предотвращающем эффективном планировании. И если, именно это сдерживает Вашу реализацию, Вы потребность для знания этого. Необходимо знать, что "я не получаю пропускную способность FP, которая должна быть возможной, таким образом, ясно другие части моего кода препятствуют инструкциям по FP быть доступными, когда ЦП готов выйти один".

, Почему Вам нужны другие способы измерить уровень? Что случилось только с разработкой количества флопс, поскольку Ваш босс спросил Вас к?;)

48
ответ дан jalf 27 November 2019 в 00:30
поделиться

Я был бы точно так же, как для добавления нескольких тонкостей:

  • подразделение является особенным. Так как большинство процессоров может сделать дополнение, сравнение или умножение в единственном цикле, те все считаются как один переброс. Но подразделение всегда занимает больше времени. Сколько дольше зависит от процессора, но существует вид defacto стандарта в сообществе HPC для подсчета одного подразделения как 4 флопс.

  • , Если процессор имеет сплавленный, умножаются - добавляют инструкция, которая делает умножение и дополнение в единственной инструкции - обычно + = B * C - который рассчитывает как 2 операции.

  • Всегда быть осторожным в различении [1 112] с одинарной точностью флопс и флопс двойной точности . Процессор, который способен к такому количеству гигафлопов с одинарной точностью, может только быть способен к небольшой части этого много гигафлопов двойной точности. Процессоры AMD Athlon и Phenom могут обычно делать вдвое меньше флопс двойной точности, чем одинарная точность. Процессоры ATI Firestream могут обычно делать 1/5-й столько же флопс двойной точности сколько одинарная точность. Если кто-то пытается продать Вам процессор или пакет программного обеспечения, и они просто заключают флопс в кавычки, не говоря, который, необходимо назвать ими на нем.

  • мегафлоп условий, гигафлоп, терафлоп, и т.д. распространен. Они относятся к факторам [1 114] 1000 , не 1024 . Например, 1 мегафлоп = 1 000 000 перебросов/секунда не 1,048,576. Так же, как с размерами дисковода, существует некоторый беспорядок на этом.

27
ответ дан Die in Sente 27 November 2019 в 00:30
поделиться

"сравните результаты со сравнительными тестами" и сделайте что?

флопс означает, что Вам нужно

1) ФЛОПС на некоторую единицу работы.

2) время для той единицы работы.

Скажем, у Вас есть некоторый входной файл, который делает 1 000 повторений через некоторый цикл. Цикл является удобной единицей работы. Это становится выполняемым 1,000 раз. Требуется час.

цикл имеет, некоторые добавляют и умножаются и несколько делений и квадратный корень. Можно рассчитать, добавляет, умножается и делится. Можно считать это в источнике, ища +, * и/. Можно найти вывод ассемблерного языка из компилятора и считать их там, также. Можно получить различные числа. Какой является правильным? Спросите своего босса.

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

Теперь Вы знаете флопс в своем цикле. И Вы знаете, что время выполняет его 1,000 раз. Вы знаете флопс в секунду.

Тогда Вы смотрите на LINPACK и находите, что Вы медленнее. Теперь, что? Ваша программа не является LINPACK, и это медленнее, чем LINPACK. Разногласия действительно хороши, что Ваш код будет медленнее. Если Ваш код не был записан и оптимизирован по тому же числу лет LINPACK, Вы будете медленнее.

Вот другая часть. Ваш процессор имеет некоторую определенную оценку флопс против различных сравнительных тестов. Ваш алгоритм не является одним из тех сравнительных тестов, таким образом, Вы далеки от сравнительных тестов. Это плохо? Или действительно ли это - очевидное последствие того, чтобы не быть сравнительным тестом?

, Чем действенный результат собирается быть?

Измерение против некоторой кодовой базы сравнительного теста только собирается сказать Вам, что Вы - алгоритм, не алгоритм сравнительного теста. Это - предрешенный результат, что Вы будете отличаться; обычно медленнее.

, Очевидно, результат измерения против LINPACK будет (a), Вы отличаетесь, и поэтому (b) Вы должен оптимизировать.

Измерение только действительно ценно, когда сделано против самостоятельно . Не некоторая гипотетическая смесь команд, но Ваша собственная смесь команд. Измерьте свой собственный уровень. Внесите изменение. Посмотрите, поправляется ли Ваша производительность - по сравнению с собой - или хуже.

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

LINPACK не имеет значения. То, что имеет значение, является Вашей кодовой базой и изменениями, которые Вы вносите для изменения производительности.

4
ответ дан S.Lott 27 November 2019 в 00:30
поделиться

Флопс, как Вы сказали, операция в секунду с плавающей точкой. Как пример при взятии точно одной секунды для операции (такой как добавление, вычитание, умножение или деление двух значений и возврат результата), производительность - просто 1 флопс. Недавний ЦП легко достигнет НЕСКОЛЬКИХ ГИГАФЛОПОВ, т.е. несколько миллиардов операций в секунду с плавающей точкой.

1
ответ дан Sören Kuklau 27 November 2019 в 00:30
поделиться

Ваш работодатель прав.
единственный способ измерить эффективность Вашей программы Фортрана (или любой другой программы, btw) состоит в том, чтобы протестировать его против стандартных сравнительных тестов, если они существуют.

И, о ФЛОПС, это обозначает "операции в секунду с плавающей точкой" - посмотрите определение на Википедию.

0
ответ дан Gabriele D'Antona 27 November 2019 в 00:30
поделиться

Я не думаю, измеряя флопс, будет очень полезно.

число достигнутого флопс скажет Вам, как занятый Ваш алгоритм сохраняет ЦП, но не скажет Вам, как хорошо Ваш алгоритм сам работает.

можно найти два различных алгоритма, которые заставляют процессор выполнять то же число флопс, но каждый предоставляет Вам желаемый результат в половину времени.

я думаю, что Вы были бы более обеспеченным рассмотрением намного 'высокоуровневой' статистической величины, такой как количество дифференциальных уравнений, решенных на единицу времени (то есть, в конце концов, цель Вашего алгоритма).

, С другой стороны, измеряя число достигнутого флопс может помочь Вам улучшить свой алгоритм, как это скажет Вам, как занятый Вы сохраняете ЦП.

0
ответ дан Chris Roberts 27 November 2019 в 00:30
поделиться

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

Я делаю это с помощью простого метода, просто прервав его несколько раз во время работы и наблюдая, что он делает. Вот что я нахожу:

  • Большую часть времени он находится в процессе вычисления производной и / или якобиана. Большая часть этого времени может быть потрачена на вызовы математических функций, таких как exp () , log () и sqrt () . Часто они повторяются с одинаковыми аргументами и могут быть запомнены. (Значительное ускорение.)

  • Большая часть времени тратится на вычисление производных слишком много раз, потому что допуски интегрирования более жесткие, чем необходимо. (Быстрее)

  • Если алгоритм неявного интегрирования (такой как DLSODE Gear) используется, потому что уравнения считаются жесткими, скорее всего, это не так, и можно использовать что-то вроде Рунге-Кутты. (ДВЕРК). (Еще быстрее)

  • Возможно, можно использовать алгоритм матрицы-экспоненты, если модель является линейной (DGPADM). Это большой выигрыш как в плане производительности, так и точности, и он невосприимчив к жесткости. (Намного быстрее)

  • Выше в стеке вызовов может случиться так, что одни и те же интеграции выполняются повторно с немного разными параметрами, чтобы определить прямой или центральный градиент разности решения по отношению к этим параметрам. Если дифференциальные уравнения сами по себе являются дифференцируемыми, то можно получить эти градиенты аналитически или путем дополнения уравнений уравнениями чувствительности. Это не только намного быстрее, но и гораздо точнее, что может ускорить работу еще выше по стеку.

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

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

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

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

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

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

1
ответ дан 27 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: