CoreMark Test

Материал из MIK32 микроконтроллер

Введение

Из wikipedia.org: CoreMark — набор синтетических тестов производительности для измерения скорости центральных процессоров во встраиваемых системах. Создан в 2009 году Shay Gal-On из компании EEMBC в качестве замены для антикварного бенчмарка Dhrystone 1984 года. Код тестов написан на языке программирования Си и содержит реализации таких алгоритмов: обработка связных списков (поиск и сортировка), обработка матриц (несколько матричных операций), машина состояний (определение, что входной символьный поток содержит действительные числа в десятичной записи), подсчет суммы CRC.

Более подробно о самом тесте можно почитать на https://ru.wikipedia.org/wiki/CoreMark

Измерения

Все тесты были проведены при частоте процессора 32МГц. Код теста скомпилирован GCC 10.xx.xx

Так как основной рабочий код будет находиться во внешней памяти, подключенной на шине QSPI, то важно отметить, что ведь код CoreMark не помещается в кэш целиком (и хорошо, иначе бы это бы повредило объективности сравнения). Таким образом результаты теста можно будет соотнести с показателями микроконтроллеров, работающих из внутренней памяти без кэш.

Результаты (чем число больше, тем выше производительность)
Источник кода Кэш CoreMark/-O0 CoreMark/-O1 CoreMark/-O2 CoreMark/-O3 CoreMark/-Os CoreMark/-Ofast
QSPI, 4 бит да 6.1 31 35 35 31 35
QSPI, 1 бит да 3.7 29 29 23 26 26
QSPI, 4 бит нет 1.2 3 3.6 3.9 3.9 2.3
QSPI, 1 бит нет 0.4 1.1 1.3 1.4 0.9 1.4
INT RAM NA не помещает. 34 40 40 32 40
INT FLASH NA не помещает. не помещает. не помещает. не помещает. не помещает. не помещает.
  • NA - неприменимо
  • не помещает. - Не помещается в выбранной памяти

Размер кода

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

Параметр CoreMark/-O0 CoreMark/-O1 CoreMark/-O2 CoreMark/-O3 CoreMark/-Os CoreMark/-Ofast
Размер кода, байт 17024 10240 10992 13328 8960 13424

Важно понимать так же, что кэш инструкций поступающих через QSPI составлят 1кБ, а кэш данных - . Эта память находится в блоке SPIFI, а не в самом ядре процессора.

Попытка объективного сравнения

Важными критериями при сравнении являются, естественно, потенциал процессора. И далее:

  • Конфигурация памяти;
  • Рабочая частота;
  • Используемый компилятор и уровень оптимизации кода
  • Наличие/отстствие кэш памяти

Наиболее близкие конкуренты MIK32 по данным с сайта https://www.eembc.org/coremark/scores.php - это микроконтроллеры на ядре Cortex-M0.

Процессор Компилятор Источник кода МГц CoreMark CoreMark/МГц
NXP LPC1114 gcc 4.3.3 (Code Red) -O3 Internal flash (Static) 48 46.93 0.98
STM32L053 IAR ANSI C/C++ Compiler V7.30 -Ohs Internal Flash 32 75.18 2.35
STM32F103RB GCC 4.4.1 -O3 Internal Flash 24 43.13 1.7971
PIC32MX360F512L GCC3.4.4 Microchip MPLAB C Compiler -O3 Internal Flash 30 72.780 2.4260
RL78/G23 Renesas CC-RL V1.12 Internal Flash 32 51.047 1.5952

Выводы

В результате исследования оказалось, что микроконтроллер MIK32 по своей производительности близок к другим микроконтроллерам на 32-битном ядре того же класса. Работа из внешней памяти ухудшает быстродействие на ~30%, но в реальности все будет зависеть от структуры приложения и его объема.

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