Процесорні модулі
Система на кристалі Modalix містить декілька процесорів, кожен з яких призначений для виконання різних етапів конвеєра обробки даних. Планувальник фреймворку Neat вибирає один (або ланцюжок) процесор для кожного етапу, виходячи з функцій, які виконує цей етап. На цій сторінці описано кожен з процесорів і те, де він використовується в типовому конвеєрі.
A65 — основний модуль застосунку.
Стандартні ядра ARM A65, на яких працює Linux. Основний процес фреймворку, весь код застосунків і більшість неапаратних прискорених елементів GStreamer виконуються тут.
Використовується для:
- Цикл подій
Graph/Run. - Файл / RTSP / мережевий ввід-вивід.
- Діагностичні тести та код для застосування на стороні, з якої здійснюється відкривання.
- Легкий клей для використання між прискореними етапами.
EV74 / CVU — обчислювальний блок для обробки зображень.
Це DSP-процесор, оптимізований для векторних обчислень. У фреймворку він місцями називається EV74, а місцями – CVU (обчисний блок обробки зображень). Використовується для обчислювальних ядер, які мають SIMD-структуру, але недостатньо великі, щоб вимагати використання MLA (множення-додавання). Застосовується для попередньої обробки (зміна розміру, перетворення кольору, нормалізація), обчислювальних ядер для обробки меж (розбиття на частини/об’єднання частин, квантування/декватування), об’єднаної попередньої обробки (універсальна попередня обробка) та постобробки BoxDecode.
Робота EV74 виконується за допомогою окремих потоків CVU для кожної стадії. Бінарні файли ядер є частиною архіву моделі (lib/).
MLA — прискорювач машинного навчання.
Modalix MLA. Зібрані ваги моделі та граф зберігаються тут. Передача даних здійснюється через потік MLA, який отримує на вхід дані, розділені на фрагменти, з EV74 (або безпосередньо з етапу квантування) і генерує вихідні дані, також розділені на фрагменти, для подальшої дефрагментації.
Робота з MLA має два варіанти:
- Висновок на основі моделі MLA — основний граф моделі.
- Підготовка MLA / об’єднані операції — попередні/післяопераційні ядра, скомпільовані в MLA, якщо це дозволено контрактом (стовпець «MLA tess» у тип даних, контракт).
MLASHM — спільна пам’ять MLA.
Спеціалізований регіон пам’яті, який модуль MLA може зчитувати з найменшою затримкою. Буфери, призначені для вхідних даних модуля MLA, за можливості виділяються з сегментів MLASHM. Планувальник забезпечує, щоб попереднє оброблення даних на стороні EV74 здійснювалося безпосередньо в MLASHM, щоб модуль MLA міг використовувати їх без передавання.
APU — блок обробки аудіосигналу.
Використовується в аудіоканалі та на деяких етапах попередньої обробки, де застосування SIMD до скалярних даних дає переваги. Аудіокомпоненти (наприклад, для зміни частоти дискретизації, кодеки) в рамках цієї системи розраховані на роботу з APU.
TVM — резервний варіант, скомпільований за допомогою TVM.
Для операцій, які компілятор MLA не може згенерувати, фреймворк може використовувати ядра ЦП, скомпільовані за допомогою TVM. Це відображається в плані маршрутизації як етап, орієнтований на TVM. Це повільніше, ніж виконання за допомогою MLA, але гарантує обробку, коли контракт MPK описує операцію, яку бекенд MLA не підтримує.
M4 — основний координатор
Невеликий процесор Cortex-M4 використовується для низькорівневої координації — протокол RPMsg між A65 та прискорювачами, сторожовий таймер, апаратна послідовність. Код застосунку ніколи не виконується безпосередньо на M4; фреймворк взаємодіє з ним через рівень операційної системи.
Як планувальник робить вибір.
Під час створення графа, модуль планування маршруту проходить кожний етап і ставить таке запитання:
- Який процесор може використовувати це ядро? — Обчислення MLA виконуються на MLA; попередня обробка — на EV74; операції введення/виведення — на A65.
- Який найдешевший спосіб дістатися туди? — мінімізуйте кількість пересадок (планувальник додає пересадку
ConversionKind::Transferлише тоді, коли це неминуче). - Чи можуть сусідні етапи використовувати спільні сегменти? — модель пам’яті визначає, що можливо; планувальник використовує цю модель.
Результатом є RouteGraph, де кожен етап містить цільовий процесор і політику сегментації. Ви можете переглянути це за допомогою Graph::describe().
Для подальшого ознайомлення
- «Процесорні модулі» — §21 і §22 розділу, присвяченого детальному аналізу проєкту.
- «Каталог ядер CVU та графів » — див. Ядра CVU..
- «Модель пам’яті» — див. модель пам’яті.
Graph::describe()— вивести план маршруту.