CoreMark и DMIPS
В первой строке даташита почти любого 32-битного микроконтроллера стоит число вроде «1,25 DMIPS/MHz» или «CoreMark 148». Это результаты стандартных тестов производительности ядра. Сравнивать по ним можно, но только понимая, что именно и в каких условиях измерено.
Обновлено Редакция GAW
CoreMark и DMIPS — числа, которыми производители описывают быстродействие процессорного ядра. DMIPS (Dhrystone MIPS) — результат старого синтетического теста Dhrystone в пересчёте на миллионы условных команд в секунду; в даташитах его чаще дают на мегагерц — DMIPS/МГц. CoreMark — тест консорциума EEMBC: число итераций набора алгоритмов в секунду, а CoreMark/МГц — то же на мегагерц тактовой частоты.
Что измеряет CoreMark
По README EEMBC, цель CoreMark — простота и проверка только функций ядра. Тест прогоняет обработку связного списка, матричные операции и конечный автомат, а правильность результатов проверяет контрольными суммами CRC. Чтобы результаты можно было сравнивать, у теста жёсткие правила:
- тест должен идти не меньше 10 секунд;
- данные — 2000 байт, проверка должна пройти для двух заданных наборов начальных значений;
- менять разрешено только файлы переноса core_portme, остальные исходники — нельзя;
- в отчёте указывают компилятор и флаги, а для CoreMark/МГц — ещё размещение кода и данных и соотношение частот памяти и ядра.
Числа из даташитов
| Микроконтроллер | Ядро | Что указано | Источник |
|---|---|---|---|
| STM32F103 | Cortex-M3, 72 МГц | 1,25 DMIPS/МГц, Dhrystone 2.1, без тактов ожидания | DS5319 |
| CC2652R | Cortex-M4F, 48 МГц | CoreMark 148; 1,25 DMIPS/МГц | SWRS207J |
| STM32G4 | Cortex-M4, 170 МГц | 213 DMIPS; 3,36 CoreMark/МГц, 571 CoreMark | ST, презентация STM32G4 Flash |
| PIC32MX1xx/2xx | MIPS32 M4K, 50 МГц | 83 DMIPS | DS60001168L |
Пересчёт в «на мегагерц» — наш: CC2652R даёт 148 / 48 ≈ 3,08 CoreMark/МГц, STM32G4 — 213 / 170 ≈ 1,25 DMIPS/МГц, PIC32MX — 83 / 50 ≈ 1,66 DMIPS/МГц.
Почему числа трудно сравнивать
- Компилятор и флаги. Один и тот же исходник с разной оптимизацией выполняется за разное число тактов. Поэтому правила CoreMark требуют указывать компилятор и флаги, а строка DMIPS в даташите обычно сообщает только версию Dhrystone и условие по памяти.
- Память. Число «1,25 DMIPS/МГц» у STM32F103 оговорено условием «без тактов ожидания». На высокой частоте флеш-память не успевает за ядром: у STM32G4 на 170 МГц ей нужно 7 тактов ожидания, и почти без потерь работать на этой частоте позволяет только ускоритель ART. Лучший результат ST получает, исполняя код из CCM SRAM.
- Ядро — не вся система. CoreMark не нагружает периферию, DMA, FPU и шины, поэтому для задач с плавающей точкой или обработкой сигналов он мало что говорит.
Для выбора микроконтроллера числа CoreMark и DMIPS годятся как первая грубая оценка внутри одного класса ядер. Сравнение семейств STM32 по ядрам и частотам — в статье «Семейства STM32».
Частые вопросы
Что такое DMIPS/МГц?
Результат теста Dhrystone, пересчитанный в миллионы условных команд в секунду и поделённый на тактовую частоту. ST указывает для Cortex-M3 в STM32F103 1,25 DMIPS/МГц по Dhrystone 2.1 при доступе к памяти без тактов ожидания (DS5319). На 72 МГц это 90 DMIPS (наш расчёт), но только если флеш не тормозит ядро.
Почему CoreMark считают честнее Dhrystone?
У CoreMark есть открытые правила запуска и отчёта: тест идёт не меньше 10 секунд, результат проверяется по контрольным суммам, менять можно только файлы переноса, а в отчёте обязательно указывают компилятор, флаги и размещение кода и данных (README eembc/coremark). Для DMIPS даташит обычно указывает только версию теста и условие по памяти — как «Dhrystone 2.1, без тактов ожидания» у STM32F103, — без компилятора и флагов, поэтому сравнение по DMIPS ещё грубее.
Можно ли сравнить микроконтроллеры по CoreMark из даташита?
Для грубой оценки — да, для точной — только при одинаковом компиляторе, флагах и размещении кода. Даже на одном STM32G4 результат зависит от того, где лежит код: ST получает максимум, исполняя код из CCM SRAM, а из флеш-памяти на 170 МГц — только с ускорителем ART, потому что флеш требует 7 тактов ожидания. Лучший тест — собственная задача на отладочной плате.
Источники
- EEMBC. CoreMark — README, eembc/coremark (GitHub) — Introduction: цель CoreMark — простота и проверка только функций процессорного ядра; алгоритмы core_list_join.c, core_matrix.c, core_state.c, проверка результатов по CRC; Run Rules: тест должен идти не меньше 10 секунд, проверка должна пройти для начальных значений 0,0,0x66 и 0x3415,0x3415,0x66 при буфере 2000 байт, все исходники компилируются с одинаковыми флагами; можно менять только core_portme*; Reporting rules: формат «CoreMark 1.0 : N / C [/ P] [/ M]», где N — итераций в секунду, C — версия и флаги компилятора, P — размещение кода и данных, для CoreMark/MHz параметр P обязателен и включает соотношение частот памяти и ядра; в конце — сравнение объёма исходников с Dhrystone
- STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319 Rev 20, July 2025) — Features: ядро Arm Cortex-M3, максимум 72 МГц, 1,25 DMIPS/МГц (Dhrystone 2.1) при доступе к памяти без тактов ожидания
- Texas Instruments. CC2652R SimpleLink Multiprotocol 2.4 GHz Wireless MCU (SWRS207J, January 2018, revised November 2023) — разд. 1 Features: Arm Cortex-M4F 48 МГц, EEMBC CoreMark 148, ток в активном режиме с CoreMark при 48 МГц — 3,4 мА (71 мкА/МГц); описание ядра: 1,25 DMIPS на МГц
- STMicroelectronics. STM32G4 — Memory Flash (FLASH), обучающая презентация ST, версия 0.1 (японская версия на STMCU.jp) — слайд 9: 213 DMIPS на 170 МГц с ускорителем ART; слайд 29: 3,36 CoreMark/МГц (один банк, кэш и предвыборка включены) — 571 CoreMark на 170 МГц; максимум — при коде в CCM SRAM и данных в SRAM1; при исполнении из флеш на 170 МГц нужно 7 тактов ожидания, ART почти убирает потерю
- Microchip. PIC32MX1XX/2XX 28/36/44-pin Family Data Sheet (DS60001168L, 2019) — стр. 1: ядро MIPS32 M4K, 50 МГц / 83 DMIPS
Нашли ошибку?
Смотрите также
- Такт ожиданияЛишние такты при обращении к медленной памяти: частоты, настройка, кэш
- ART Accelerator (кэш флеш STM32)Предвыборка и кэш, скрывающие такты ожидания флеш-памяти
- CCM RAM (память ядра)ОЗУ, подключённое к ядру напрямую, без доступа для DMA
- Thumb-2Набор команд Cortex-M: смесь 16- и 32-битных команд Thumb
- Семейства STM32Сравнение 25 семейств: ядро, частота, память, питание, периферия; выбор под задачу