Как рассчитать MIPS для алгоритма для процессора ARM

StackOverflow https://stackoverflow.com/questions/678771

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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


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

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

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

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

Это было полезно?

Решение

Могу поспорить, что ваш поставщик оборудования спрашивает, сколько 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_секунду

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

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

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

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

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

Другие советы

Некоторые примечания:

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

  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.

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

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

  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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top