Как рассчитать MIPS для алгоритма для процессора ARM - PullRequest
9 голосов
/ 24 марта 2009

Недавно меня попросили создать MIPS (миллион инструкций в секунду) для алгоритма, который мы разработали. Алгоритм представлен набором функций в стиле C. Мы применили код на Dell Axim для оценки производительности при разных входах.

Этот вопрос пришел от нашего поставщика оборудования, но я в основном разработчик программного обеспечения HL, поэтому я не уверен, как ответить на запрос. Может быть, кто-то с подобным фоном HW / SW может помочь ...

  1. Поскольку наш алгоритм не в реальном времени, я не думаю, что нам нужно количественно определять его как MIPS. Можно ли просто указать общее количество инструкций по сборке?

  2. Если 1 истинно, как это сделать (т.е. как измерить количество инструкций по сборке) в целом или специально для ARM / XScale?

  3. Можно ли выполнить 2 на устройстве WM или через эмулятор устройства, предоставляемый в VS2005?

  4. Можно ли автоматизировать 3?

Большое спасибо за вашу помощь. Charles


Спасибо за вашу помощь. Я думаю, что С.Лотт ударил по гвоздю. И теперь у меня есть еще вопросы.

5 Есть предложения о том, как измерять MIPS? Я слышал, кто-то предложил запустить наш алгоритм и сравнить его с эталоном Dhrystone / Whetstone для вычисления MIS.

6 Поскольку алгоритм не нужно запускать в реальном времени, действительно ли MIPS является полезной мерой? (например, factorial (N)) Каковы другие способы количественного определения требований к обработке? (Я уже измерил производительность во время выполнения, но это не было удовлетворительным ответом.)

7 Наконец, я предполагаю, что MIPS - грубая оценка, и она будет деп. на компилятор, настройки оптимизации и т. д.?

Ответы [ 7 ]

9 голосов
/ 24 марта 2009

Держу пари, что ваш поставщик оборудования спрашивает, сколько MIPS вам нужно.

Как в «Вам нужен процессор 1000 MIPS или процессор 2000 MIPS?»

Что переводится руководством на "Сколько MIPS?"

Аппаратное обеспечение MIPS. Программное обеспечение потребляет MIPS.

У вас есть две степени свободы.

  • Предложение MIPS, присущее процессору.

  • Количество секунд, в течение которых вы потребляете столько MIPS.

Если процессору не хватает MIPS, ваш алгоритм будет «медленным».

если у процессора достаточно MIPS, ваш алгоритм будет «быстрым».

Я поставил «быстрый» и «медленный» в кавычках, потому что вам нужно иметь требование к производительности, чтобы определить «достаточно быстрый, чтобы соответствовать требованию к производительности» или «слишком медленный, чтобы соответствовать требованию к производительности».

На 2000 MIPS-процессоре вы можете потратить 2 секунды. Но на процессоре 1000 MIPS это приводит к недопустимым 4 секундам.


Сколько MIPS вам нужно?

  1. Получите официальные MIPS для вашего процессора. См http://en.wikipedia.org/wiki/Instructions_per_second

  2. Запустите ваш алгоритм на некоторых данных.

  3. Измерьте точное время выполнения. Усредните группу образцов, чтобы уменьшить неопределенность.

  4. Отчет. 3 секунды на процессоре 750 MIPS - это хорошо - 3 секунды на 750 MIPS. MIPS это ставка. Время есть время. Расстояние - это произведение скорости на время. 3 секунды при 750 MIPS - 750 * 3 миллиона инструкций.

Запоминание скорости (в инструкциях в секунду) * Время (в секундах) дает вам инструкции.

Не говорите, что это 3 * 750 MIPS. Это не так; это 2250 миллионов инструкций.

3 голосов
/ 02 июня 2009

Некоторые заметки:

  1. MIPS часто используется в качестве общего показателя «производительности» для процессоров, особенно в мягкой области реального времени / встраиваемой области, где вы хотите убедиться, что вы не перегружаете процессор работой. Обратите внимание, что это инструкции IS в секунду, поскольку время очень важно!

  2. MIPS, используемые таким образом, совершенно ненаучны.

  3. MIPS, используемые таким образом, все еще часто являются наилучшим приближением для определения размеров системы и определения скорости процессора. Это может быть на 25%, но не берите в голову ...

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

Вы никак не можете приблизить это на ПК. Вам нужно использовать один из нескольких инструментов, чтобы сделать это правильно:

  1. Используйте имитатор набора инструкций для целевого артинкарта, такого как Qemu, собственные инструменты ARM, Synopsys, CoWare, Virtutech или VaST. Они быстрые, но могут достаточно хорошо рассчитывать инструкции и будут поддерживать правильный набор команд. Запрещая широкое использование дорогих инструкций, таких как целочисленное деление (и, пожалуйста, не используйте число с плавающей запятой), эти числа, как правило, очень близки.

  2. Найдите точный симулятор тактового цикла для вашего целевого процессора (или чего-то близкого), который даст довольно хорошую оценку эффектов конвейера и т. Д. Еще раз, получите его от ARM или от Carbon SoCDesigner.

  3. Получите плату разработки для целевого семейства процессоров или ARM, близкий к его дизайну, и профилируйте приложение там. Вы не используете ARM9 для профилирования ARM11, но ARM11 может быть хорошим приближением для ARM Cortex-A8 / A9, например.

2 голосов
/ 24 марта 2009

MIPS обычно используется для измерения возможностей процессора.

Алгоритмы обычно принимают либо:

  1. определенное количество времени (при работе на определенном процессоре)
  2. определенное количество инструкций (в зависимости от архитектуры)

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

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

const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials
1 голос
/ 15 июня 2012

Этот ответ не предназначен для прямого ответа на вопрос, но для предоставления дополнительного контекста вокруг того, почему этот вопрос задается.

MIPS для алгоритма имеет отношение только к алгоритмам, которые должны ответить на событие в течение требуемого времени.

Например, рассмотрим контроллер, предназначенный для определения скорости ветра и перемещения привода в течение одной секунды, когда скорость ветра превышает 25 миль / час. Допустим, требуется 1000 инструкций для расчета и сравнения скорости ветра с пороговым значением. Требование MIPS для этого алгоритма составляет 1 килограмм в секунду (KIP). Если контроллер основан на 1 процессоре MIPS, мы можем с уверенностью сказать, что в контроллере больше сока для добавления других функций.

Какие еще функции могут быть добавлены на контроллере? Это зависит от MIPS добавляемой функции / алгоритма. Если есть другая функция, для которой необходимо выполнить 100 000 инструкций в течение одной секунды (например, 100 KIP), мы все равно сможем приспособиться к этой новой функции, и у нас останется место для добавления других функций.

1 голос
/ 29 апреля 2009

Также помните, что разные компиляторы и опции компилятора имеют ОГРОМНОЕ различие. Один и тот же исходный код может работать на разных скоростях. Таким образом, вместо покупки процессора 2mips вы можете использовать процессор 1 / 2mips и использовать опцию компилятора. Или потратьте деньги на лучший компилятор и используйте более дешевый процессор.

Бенчмаркинг в лучшем случае некорректен. В качестве хобби я использовал для компиляции одного и того же кода dhrystone (и точечного камня) на разных компиляторах от разных поставщиков для одного и того же оборудования, и цифры были повсюду, порядки величин. Тот же исходный код, тот же процессор, dhrystone ничего не значил, бесполезен в качестве основы. В бенчмаркинге важно то, насколько быстро работает ВАШ алгоритм, он должен быть быстрее или быстрее, чем нужно. В зависимости от того, насколько близко к финишной черте вы допускаете много помои. На раннем этапе, вероятно, вы захотите работать в 5, 10 или 100 раз быстрее, чем вам нужно, чтобы к концу проекта вы, по крайней мере, немного быстрее, чем вам нужно.

Я согласен с тем, что, по моему мнению, говорит С. Лотт, это все разговоры о продажах, маркетинге и менеджменте. Будучи тем, кого руководство поставило между молотом и наковальней, вам нужно заставить их купить самый быстрый процессор и лучшие инструменты, которые они готовы потратить, основываясь на красочных круговых диаграммах и графиках, которые вы собираетесь использовать. генерировать из воздуха в качестве оправдания. Если ближе к концу пути он не совсем соответствует производительности, то вы можете вернуться к стековому потоку, но в то же время руководство будет вынуждено купить другой набор инструментов практически по любой цене или поменять местами процессоры и вернуть плату. К тому времени вы должны знать, насколько вы близки к цели, нам нужно 1,0, и мы находимся на уровне 1,25, если мы купим процессор, который в два раза быстрее того, который мы купили, мы должны его сделать.

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

1 голос
/ 24 марта 2009

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

Поскольку вы можете измерить алгоритм по количеству инструкций (что, несомненно, будет зависеть от входных данных, так что это нетривиально), вам потребуется некоторая мера времени для получения MIPS - например сказать: «Мне нужно вызвать его 1000 раз в секунду». Если ваш алгоритм содержит 1000 инструкций для этого конкретного случая, вы получите:

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

Я все еще думаю, что это действительно странный способ попытаться что-то сделать, поэтому вы можете попросить разъяснений. Что касается ваших конкретных вопросов, я оставлю это кому-то более знакомому с Visual Studio.

0 голосов
/ 25 марта 2009

Для первой оценки может пригодиться тест на ПК.

Однако, прежде чем перейти к определенному устройству и тактовой частоте, вы должны получить плату разработчика (или какой-нибудь КПК?) Для целевой архитектуры ARM и сравнить ее там.

Существует множество факторов, влияющих на скорость на современных машинах (кеширование, конвейеры, различные наборы инструкций, ...), поэтому ваши тесты на ПК могут быть далеко от w.r.t. АРМ.

...