exponenta event banner

Назначение задач ядрам для многоядерного программирования

В этом примере показано, как использовать преимущества выполнения кода на многоядерном процессоре посредством графического разбиения. В этом примере для создания многопоточного кода требуется Simulink Coder™.

Введение

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

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

Попробуйте пример

Типичная ситуация для многоядерных процессоров состоит из многоскоростной модели, для которой требуется назначить код для быстрых скоростей одному ядру, а код для более низких скоростей - другим ядрам. Это может позволить добавить больше логики к этим более быстрым скоростям или достичь большего детерминизма. В более общем плане, возможно, потребуется посвятить ядра логике приложений с наибольшим спросом на ресурсы. Для начала откройте многоядерный проект:

slexMulticoreExample

Создание многопоточного кода

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

Дважды щелкните кнопку «Generate Code and Profile Report» (Создать код и отчет о профиле), чтобы создать многопоточный код и профилировать его выполнение. Это действие запускает и управляет генерируемым исполняемым файлом и выдает как результаты профилирования, так и основную карту занятости, последняя из которых проиллюстрирована ниже. На иллюстрации показано, как ядра использовались на каждом этапе выполнения. В этом примере первое ядро использовалось для быстрых скоростей (Task1 и Task2), а второе ядро использовалось для более низких скоростей (Task3 и Task4).

Можно вернуться к диалоговому окну «Одновременное выполнение», чтобы проверить различные назначения ядра. В частности, можно попытаться указать отсутствие сходства ядра, оставив свойство «» Affinity «» как «» [] «». Этот параметр по умолчанию позволяет Simulink™ создавать многопоточный код, подходящий для динамического планирования на многоядерном процессоре.