CoreMark Test: различия между версиями
(→Выводы) |
|||
(не показано 26 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
=== Введение === | ==== Введение ==== | ||
Из wikipedia.org: '''CoreMark''' — набор синтетических тестов производительности для измерения скорости центральных процессоров во встраиваемых системах. Создан в 2009 году Shay Gal-On из компании EEMBC в качестве замены для антикварного бенчмарка Dhrystone 1984 года. Код тестов написан на языке программирования Си и содержит реализации таких алгоритмов: обработка связных списков (поиск и сортировка), обработка матриц (несколько матричных операций), машина состояний (определение, что входной символьный поток содержит действительные числа в десятичной записи), подсчет суммы CRC. | Из wikipedia.org: '''CoreMark''' — набор синтетических тестов производительности для измерения скорости центральных процессоров во встраиваемых системах. Создан в 2009 году Shay Gal-On из компании EEMBC в качестве замены для антикварного бенчмарка Dhrystone 1984 года. Код тестов написан на языке программирования Си и содержит реализации таких алгоритмов: обработка связных списков (поиск и сортировка), обработка матриц (несколько матричных операций), машина состояний (определение, что входной символьный поток содержит действительные числа в десятичной записи), подсчет суммы CRC. | ||
Строка 5: | Строка 5: | ||
==== Измерения ==== | ==== Измерения ==== | ||
Все тесты были проведены при частоте процессора 32МГц. Код теста скомпилирован GCC 10.xx.xx | |||
Так как основной рабочий код будет находиться во внешней памяти, подключенной на шине QSPI, то важно отметить, что ведь код CoreMark не помещается в кэш целиком (и хорошо, иначе бы это бы повредило объективности сравнения). Таким образом результаты теста можно будет соотнести с показателями микроконтроллеров, работающих из внутренней памяти без кэш. | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
Результаты (чем число больше, тем выше производительность) | |||
!Источник кода | !Источник кода | ||
!Кэш | !Кэш | ||
! | !CoreMark/-O0 | ||
! | !CoreMark/-O1 | ||
!CoreMark/-O2 | |||
!CoreMark/-O3 | |||
!CoreMark/-Os | |||
!CoreMark/-Ofast | |||
|- | |- | ||
|QSPI, 4 бит | |QSPI, 4 бит | ||
|да | |да | ||
| | |6.1 | ||
| | |31 | ||
|35 | |||
|35 | |||
|31 | |||
|35 | |||
|- | |- | ||
|QSPI, 1 бит | |QSPI, 1 бит | ||
|да | |да | ||
| - | |3.7 | ||
|29 | |||
|29 | |||
|23 | |||
|26 | |||
|26 | |||
|- | |||
|QSPI, 4 бит | |||
|нет | |||
|1.2 | |||
|3 | |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 поступает по последовательному каналу и имеет дополнительные циклы ожидания инструкций, то размер кода приложения имеет первостепенную значимость. | |||
{| class="wikitable" | |||
!Параметр | |||
!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. | |||
{| class="wikitable" | |||
|+ | |||
!Процессор | |||
!Компилятор | |||
!Источник кода | |||
!МГц | |||
!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. |
Текущая версия от 09:45, 19 апреля 2024
Введение
Из 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.