Освоение мультикорового программирования и отладки: стратегии для производительности и надежности
В этой статье мы исследуем эволюцию мультикоровых процессоров, их растущую превалентность и дизайнерские, производительностные и отладочные соображения, которые их сопровождают.
Производительность систем
Приросты производительности в встроенных системах могут быть достигнуты через изощренные компиляторные оптимизации, эффективные аппаратные архитектуры и, все более, параллельное исполнение по множественным ядрам. В то время как хитрые компиляторные алгоритмы могут выжать дополнительную скорость из однопоточного кода, давнее предположение, что тактовые частоты будут продолжать удваиваться каждые несколько лет, стало несостоятельным. Современный потолок производительности лежит в низком однозначном гигагерцовом диапазоне, делая параллелизм наиболее жизнеспособным путем к масштабированию.
Параллелизм

Не все задачи одинаково поддаются параллелизации. Один человек должен просверлить глубокую яму, поэтому добавление больше рабочих к этой яме не ускоряет работу; на самом деле, это может препятствовать прогрессу. И наоборот, выкапывание траншеи высоко параллельно: несколько рабочих могут копать рядом, каждый покрывая фракцию общей нагрузки.

Эта иллюстрация изображает MIMD (Multiple Instruction, Multiple Data), где каждый рабочий (ядро) может выполнять отдельные операции. С четырьмя независимыми рабочими задача, которая бы заняла одно ядро полную минуту, может быть закончена примерно за 15 секунд.

В противовес, SIMD (Single Instruction, Multiple Data) выполняет одну инструкцию по многим элементам данных одновременно. SIMD идеален для нагрузок с регулярными, повторяющимися операциями — таких как фильтрация изображений или векторная математика — но ему не хватает гибкости для общего назначения вычислений.
Эти соображения лежат в основе подъема мультикоровых процессоров: встраивая множественные полные CPU подсистемы на одном дай, дизайнеры могут масштабировать производительность линейно, при условии, что ПО написано для эксплуатации параллелизма.
Различные типы мультикоровой обработки
Процессоры могут комбинировать ядра различными способами, влияя на то, как нагрузки распределяются и как ядра коммуницируют.
Однородные мультикоровые
Два или более идентичных ядра, каждое со своими регистрами, функциональными блоками и часто частными L1 кэшами. Коммуникация ядер обычно происходит через общую память или механизмы почтовых ящиков. Поскольку каждое ядро одного типа, тот же бинарник может запускаться на любом из них.

Гетерородные мультикоровые
Смесь разных типов ядер, каждое оптимизированное для конкретной нагрузки. Например, Bluetooth контроллер может посвятить одно ядро обработке протокола, в то время как второе управляет логикой высшего уровня приложения. Эта архитектура распространена в мобильных SoC и промышленных контроллерах.

Паттерны распределения ядер дополнительно отличают мультикоровые дизайны:
Симметричная мультипроцессинг (SMP)
Множественные идентичные ядра исполняют один бинарник, координированные реально-временной ОС (RTOS). Планировщик распределяет работу по ядрам, и бинарник компилируется для одного типа ядра.

Асимметричная мультипроцессинг (AMP)
Каждое ядро запускает свой собственный выделенный бинарник. Ядра могут быть однородными или гетерородными. Коммуникация опциональна и обычно обрабатывается через общую память или мессениджинг примитивы.
Поскольку SMP требует один бинарник, оно мандирует однородные ядра. AMP может быть реализовано на либо однородных, либо гетерородных системах, делая его идеальным для применений, нуждающихся в отдельных, специализированных нагрузках.
Причины использования мультикоровых
По мере замедления закона Мура, наиболее эффективный путь к более высокой производительности — упаковать больше ядер на дай. В то время как тактовые частоты достигли плато в низко-однозначном GHz диапазоне, плотности транзисторов продолжают карабкаться вверх, позволяя богатые интерконнекты и более крупные on-chip кэши. Мультикоровые дизайны раскрывают полный потенциал этой денсификации.
Гетерородный AMP особенно мощен для реально-временных и throughput-центричных нагрузок. Изолируя время-критические функции на выделенном ядре, дизайнеры могут встречать строгие гарантии задержки без компромисса общей системной пропускной способности. Это разделение также упрощает сертификацию, потому что реально-временной компонент может быть верифицирован независимо от логики приложения.
Вызовы использования мультикоровых
Принятие мультикоровой архитектуры вводит множество ПО и системных вызовов:
- Гранулярность задач — Монолитное приложение часто не может эффективно использовать множественные ядра. Разработчики должны рефакторить код в независимые задачи, которые могут запускаться конкурентно. Плохой тред дизайн может привести к недоиспользованию или конкуренции.
- Бутылочные горлышки синхронизации — Общие структуры данных и I/O устройства требуют блокировок (мьютексы, спинлоки, read-write блокировки и т.д.). Чрезмерная блокировка или высокая конкуренция могут сериализовать работу и отрицать параллельные выигрыши.
- Дисбаланс нагрузки — Если одно ядро заканчивает работу рано, пока другие отстают, бездействующее ядро представляет потраченные вычислительные циклы. Разбивка больших заданий на меньшие, равномерно размерные куски — существенно.
- Реально-временные ограничения — В SMP системах RTOS планировщик должен балансировать задержку и пропускную способность. Выбор между data-partitioning (каждый тред обрабатывает блок данных) и function-partitioning (каждый тред выполняет отдельную стадию конвейера) зависит от профиля нагрузки.
Отладка в мультикоровых средах
Эффективная отладка опирается на комплексную видимость всех ядер:
- Координированный контроль — Отладчик должен позволять одновременное или независимое остановление, пошаговое выполнение и установку брейкпоинтов по ядрам.
- Мультикоровая трассировка — Захват трассировочных данных с нескольких ядер одновременно требует высокополосный транспорт (например, CoreSight SWD и TPIU порты) и интеллектуальную фильтрацию для избежания перегрузки данными.

(Источник: IAR Systems, диаграмма любезно Arm Ltd.)
CoreSight отладочная архитектура Arm интегрирует cross-trigger интерфейсы (CTI) и cross-trigger матрицу (CTM), позволяя отладчику останавливать или триггерить действия на любом ядре в ответ на события от другого ядра. Эта способность критична для диагностики race conditions и deadlocks.
IAR Embedded Workbench C-SPY отладчик поддерживает как SMP, так и AMP конфигурации. Для SMP пользователь указывает счетчик ядер и отладчик автоматически подключается к каждому ядру. AMP поддержка требует двух экземпляров IDE (Master и Node) когда ядра запускают отдельные бинарники.

В правом виде отображен 4-ядровый Cortex-A9 SMP кластер: ядро 2 остановлено, в то время как остальные продолжают исполнение.
Для гетерородных систем вроде ST STM32H745/755 (Cortex-M7 + Cortex-M4), отладчик запускает отдельные IDE окна для каждого ядра. Каждое окно показывает статус своего ядра и, опционально, другого ядра, позволяя разработчикам наблюдать межъядерные взаимодействия в реальном времени.

Два CTI (системный уровень, Cortex-M4 и Cortex-M7) соединены CTM, давая отладчику тонкозернистый контроль над брейкпоинтами и трассировками триггеров.

(Источник: IAR Systems, диаграмма любезно STMicroelectronics из M0399 Reference manual)
Типичные применения используют shared-memory интерфейс и легковесный RTOS (например, FreeRTOS) для обмена сообщениями между ядрами. С перспективы каждого ядра коммуникация появляется как простое задачное мессениджинг, абстрагируя нижележащую межъядерную механику.

В workspace explorer видны два проекта (Cortex-M7 и Cortex-M4), и пользователь может переключать фокус между ними. Master проект автоматически запускает второй экземпляр IDE, упрощая AMP отладку.
Резюме
Мультикоровые архитектуры доставляют производительность, нужную при замедлении закона Мура, но они требуют дисциплинированного ПО дизайна и изощренных отладочных инструментов. Однажды сконфигурированная отладочная среда, разработчики находят, что мультикоровая отладка удивительно прямолинейна, особенно по сравнению с вызовами, часто сообщаемыми теми, кто работал только с моно-коровыми системами.
Современное железо и интегрированные программные инструменты теперь делают практичным использование мультикоровой производительности при сохранении надежности и прослеживаемости.
Примечание: Изображения фигур IAR Systems, если не указано иное.

Aaron Bauch — Senior Field Application Engineer в IAR Systems, работающий с клиентами в Восточных США и Канаде. Aaron работал с встроенными системами и ПО для компаний включая Intel, Analog Devices и Digital Equipment Corporation. Его дизайны охватывают широкий диапазон применений включая медицинскую инструментацию, навигацию и банковские системы. Aaron также преподавал ряд колледжных курсов включая Embedded System Design как профессор в Southern NH University. Mr. Bauch имеет Bachelor's degree в Electrical Engineering от The Cooper Union и Masters в Electrical Engineering от Columbia University, оба в Нью-Йорке, NY.
Связанные материалы:
- Обеспечение программного таймингового поведения в критических мультикоровых встроенных системах
- Мультикоровые системы, гипервизоры и мультикоровые фреймворки
- High-performance embedded computing — Параллелизм и компиляторная оптимизация
- Ты думаешь твое ПО работает? Докажи это!
- Программная трассировка в полевых развернутых устройствах
- Компиляторы в чужом мире функциональной безопасности
Для большего Embedded, подпишитесь на еженедельную email рассылку Embedded.
Встроенный
- Мастерство SaaS и Wi-Fi: Как ИТ-команды преодолевают облачные вызовы
- Основные платы расширения для Raspberry Pi: I2C, UART, GPIO и не только — Наборы, хэдеры и защита
- Топ-5 вызовов 5G: навигация по спектру, стоимости, покрытию, устройствам и безопасности
- Навигация по многогранным рискам в авиакосмической и оборонной промышленности
- Цифровые накладные: почему цепочки поставок все еще используют бумагу — и когда они переключатся
- Преодоление проблем ETL данных IoT для повышения ROI
- Освоение твердой токарной обработки: преодоление вызовов передовым инструментом
- Четыре ключевых вызова, формирующих индустрию OEM авиации и обороны
- Почему актуальная документация критична: выгоды и вызовы для вашего бизнеса
- Гибридное производство: ключевые преимущества, вызовы и влияние на отрасли