Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Освоение мультикорового программирования и отладки: стратегии для производительности и надежности

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

Производительность систем

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

Параллелизм

Освоение мультикорового программирования и отладки: стратегии для производительности и надежности

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

Освоение мультикорового программирования и отладки: стратегии для производительности и надежности

Эта иллюстрация изображает 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-центричных нагрузок. Изолируя время-критические функции на выделенном ядре, дизайнеры могут встречать строгие гарантии задержки без компромисса общей системной пропускной способности. Это разделение также упрощает сертификацию, потому что реально-временной компонент может быть верифицирован независимо от логики приложения.

Вызовы использования мультикоровых

Принятие мультикоровой архитектуры вводит множество ПО и системных вызовов:

Отладка в мультикоровых средах

Эффективная отладка опирается на комплексную видимость всех ядер:

Освоение мультикорового программирования и отладки: стратегии для производительности и надежности
(Источник: 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.


Связанные материалы:

Для большего Embedded, подпишитесь на еженедельную email рассылку Embedded.

Встроенный

  1. Мастерство SaaS и Wi-Fi: Как ИТ-команды преодолевают облачные вызовы
  2. Основные платы расширения для Raspberry Pi: I2C, UART, GPIO и не только — Наборы, хэдеры и защита
  3. Топ-5 вызовов 5G: навигация по спектру, стоимости, покрытию, устройствам и безопасности
  4. Навигация по многогранным рискам в авиакосмической и оборонной промышленности
  5. Цифровые накладные: почему цепочки поставок все еще используют бумагу — и когда они переключатся
  6. Преодоление проблем ETL данных IoT для повышения ROI
  7. Освоение твердой токарной обработки: преодоление вызовов передовым инструментом
  8. Четыре ключевых вызова, формирующих индустрию OEM авиации и обороны
  9. Почему актуальная документация критична: выгоды и вызовы для вашего бизнеса
  10. Гибридное производство: ключевые преимущества, вызовы и влияние на отрасли