модуль ara::shwa — Safe Hardware Acceleration
Diese Seite wurde vollständig KI-generiert auf Basis von SWS Safe Hardware Acceleration (R25-11) — kein offizieller AUTOSAR-Text und keine automatisch extrahierte API-Seite wie die übrigen Module. Als Interpretation gekennzeichnete Aussagen sind Schlussfolgerungen aus den Quellen.
Руководство по модулюСОЗДАНО ИИ
Обеспечивает безопасное, стандартизированное использование гетерогенных аппаратных ускорителей для вычислений с параллелизмом по данным.
Обеспечивает безопасное, стандартизированное использование гетерогенных аппаратных ускорителей для вычислений с параллелизмом по данным.
Адаптивный кластер shwa предоставляет локальную для процесса библиотеку для функционально безопасного управления гетерогенными вычислительными ускорителями, такими как GPU и NPU (AUTOSAR_AP_EXP_SWArchitecture с. 127). Он обеспечивает аппаратно-независимый выбор исполнительных блоков, управление n-мерными буферами памяти, а также асинхронную постановку параллельных вычислительных задач в очереди выполнения ([AP_SWS_SHWA_00309], [AP_SWS_SHWA_00912]). При ошибках выполнения задач семантика отката отсутствует, вследствие чего затронутые данные буфера считаются неопределенно измененными ([AP_SWS_SHWA_00604]).
Функциональный кластер Safe Hardware Acceleration (shwa) предоставляет для AUTOSAR Adaptive Platform стандартизированную, функционально безопасную модель выполнения для гетерогенных вычислительных блоков, таких как GPU, NPU, DSP и FPGA (AUTOSAR_AP_EXP_SWArchitecture с. 132). Реализованный в виде внутрипроцессной библиотеки, shwa позволяет Adaptive Applications, а также другим функциональным кластерам напрямую и без задержек управлять высокопроизводительными вычислительными ресурсами (AUTOSAR_AP_EXP_SWArchitecture с. 127, SWS_SafeHardwareAcceleration с. 23).
Аппаратные платформы и целевые устройства абстрагируются через Platform и Device ([AP_SWS_SHWA_01107], [AP_SWS_SHWA_00308]). С помощью классов стратегий, таких как GpuSelector или AcceleratorSelector, приложения могут гибко выбирать подходящие вычислительные цели ([AP_SWS_SHWA_00407], [AP_SWS_SHWA_00413]). Буферы данных выделяются через Buffer в N-мерных пространствах индексов (Range), тогда как структурированные операции чтения и записи выполняются с контролем типов через Accessor и Id ([AP_SWS_SHWA_00209], [AP_SWS_SHWA_00007], [AP_SWS_SHWA_00707]).
Диаграмма последовательности: сквозной процесс выделения буфера, отправки ядра (Submit) и асинхронной синхронизации. Источники: AP_SWS_SHWA_00209, AP_SWS_SHWA_00909, AP_SWS_SHWA_00912, AP_SWS_SHWA_00604.
Вычислительные задания определяются через TaskHandler как отдельная задача или параллельный цикл и передаются устройству через очереди (Queue) ([AP_SWS_SHWA_01203], [AP_SWS_SHWA_00912]). В качестве результата возвращается объект Event для блокирующих или ограниченных по времени синхронизаций ([AP_SWS_SHWA_00604], [AP_SWS_SHWA_00606]). Для мониторинга во время выполнения служит DeviceMonitor, который отображает текущее состояние аппаратного обеспечения (kReady, kNotAccesible, kFailure, kUnknown) ([AP_SWS_SHWA_01407], [AP_SWS_SHWA_00103]).
Об ошибках сообщается детерминированно через ara::core::Result и ShwaErrorCode ([AP_SWS_SHWA_01301]). Если выполнение задачи завершается сбоем, операции не имеют семантики отката, поэтому связанные буферы должны классифицироваться как неопределенно модифицированные ([AP_SWS_SHWA_00604], [AP_SWS_SHWA_00914]).
Архитектурная роль и системные границы Safe Hardware Acceleration
Функциональный кластер Safe Hardware Acceleration (shwa) предоставляет в рамках AUTOSAR Adaptive Platform стандартизированную, функционально безопасную модель выполнения и абстракции для гетерогенных вычислительных блоков, таких как GPU, DSP, NPU и FPGA (AUTOSAR_AP_EXP_SWArchitecture с. 132). В отличие от платформенных кластеров на базе демонов, таких как Platform Health Management, shwa спроектирован как локальная для процесса библиотека, не использующая демоны (внутрипроцессная библиотека) (AUTOSAR_AP_EXP_SWArchitecture с. 127). Благодаря этому среда выполнения действует непосредственно в адресном пространстве POSIX потребляющего пользовательского процесса и развязывает вычислительные задания без задержек IPC от нижележащих драйверов ускорителей (AUTOSAR_AP_SWS_SafeHardwareAcceleration с. 23).
Архитектурный дизайн интерфейса ориентирован на современные стандарты гетерогенных вычислений, такие как SYCL и OpenCL, однако строго адаптирует эти парадигмы к детерминированным и ориентированным на безопасность требованиям AUTOSAR Adaptive Platform (AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI с. 15). Конструкторы всех первичных интерфейсных классов объявлены закрытыми; экземпляры могут создаваться исключительно через именованные статические фабричные методы типа Create() (EXP_SafeHardwareAccelerationAPI с. 15). Практически все операции сигнализируют о своем успехе или системных состояниях ошибок через возвращаемый тип ara::core::Result ([AP_SWS_SHWA_00308], EXP_SafeHardwareAccelerationAPI с. 15). Помимо обычных Adaptive Applications, другие функциональные кластеры (например, кластеры обработки изображений или восприятия) также могут напрямую подключать интерфейсы C++ из shwa для высокопараллельных рабочих нагрузок HPC (SWS_SafeHardwareAcceleration с. 23).
Контекстная диаграмма: встраивание ara::shwa в качестве внутрипроцессной библиотеки в адресное пространство процесса POSIX для управления гетерогенными ускорителями. Источники: AUTOSAR_AP_EXP_SWArchitecture, стр. 127, SWS_SafeHardwareAcceleration, стр. 22.
Аппаратная топология, обнаружение платформ и выбор устройств
Топология вычислительных ускорителей, интегрированных в общую систему, абстрагируется через интерфейс Platform ([AP_SWS_SHWA_01107]). С помощью статической операции Platform::GetPlatforms() приложение сначала определяет все зарегистрированные платформы выполнения, а затем запрашивает назначенные им вычислительные блоки посредством Platform::GetDevices() ([AP_SWS_SHWA_01108], AUTOSAR_AP_EXP_SWArchitecture с. 132). Каждая физическая или логическая цель выполнения представляется в системе объектом Device ([AP_SWS_SHWA_00302]). Device предоставляет методы инспекции для классификации типа аппаратного обеспечения, среди которых IsCpu() ([AP_SWS_SHWA_00310]), IsGpu() ([AP_SWS_SHWA_00311]) и IsAccelerator() ([AP_SWS_SHWA_00312]), а также обобщенные запросы сведений через шаблон функции GetInfo() ([AP_SWS_SHWA_00313]).
Для адресного выбора подходящих вычислительных блоков shwa предоставляет полиморфный паттерн выбора DeviceSelector ([AP_SWS_SHWA_00402], [AP_SWS_SHWA_00403]). С помощью стандартных реализаций GpuSelector ([AP_SWS_SHWA_00406], [AP_SWS_SHWA_00407]), CpuSelector ([AP_SWS_SHWA_00409], [AP_SWS_SHWA_00410]) и AcceleratorSelector ([AP_SWS_SHWA_00412], [AP_SWS_SHWA_00413]) системы могут фильтровать вычислительные цели по предварительно заданным приоритетам или эвристическим оценкам пригодности. Фабричный метод Device::Create(deviceSelector) напрямую связывает этот механизм выбора с инстанцированием устройства ([AP_SWS_SHWA_00309]).
Диаграмма последовательности: определение топологии, выбор вычислительной цели и инстанцирование логического устройства. Источники: AP_SWS_SHWA_01107, AP_SWS_SHWA_01108, AP_SWS_SHWA_00407, AP_SWS_SHWA_00309.
Управление памятью и многомерный доступ к данным с помощью буфера и метода доступа
Для параллельных вычислительных операций на гетерогенных архитектурах shwa строго разделяет физическое хранение данных и логический доступ (AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI с. 15). Области памяти инкапсулируются через шаблон Buffer<DataT, Dimensions, AllocatorT> ([AP_SWS_SHWA_00202]). Протяженность памяти в одномерном, двумерном или трехмерном пространстве задается структурой Range<Dimensions> ([AP_SWS_SHWA_01007], [AP_SWS_SHWA_01008], [AP_SWS_SHWA_01009]), размеры которой можно запросить через GetDimension0(), GetDimension1() и GetDimension2() ([AP_SWS_SHWA_01010], [AP_SWS_SHWA_01011], [AP_SWS_SHWA_01012]). Буфер может создаваться заново с собственной памятью или аллокатором ([AP_SWS_SHWA_00209], [AP_SWS_SHWA_00210]) либо подключать существующие указатели памяти хоста (hostData) в качестве входных или выходных данных ([AP_SWS_SHWA_00211], [AP_SWS_SHWA_00213], [AP_SWS_SHWA_00214]). Владеющие буферы обычно возвращаются из Buffer::Create() как std::unique_ptr (EXP_SafeHardwareAccelerationAPI с. 15).
Непосредственный доступ для чтения и записи данных буфера осуществляется не напрямую через указатели, а через типизированные объекты Accessor ([AP_SWS_SHWA_00007], [AP_SWS_SHWA_00008]). Режим доступа определяется перечислением AccessMode, которое включает варианты kRead, kWrite и kReadWrite ([AP_SWS_SHWA_00101]). Адресация дискретных точек индексов в N-мерном пространстве выполняется с помощью типа Id<Dimensions> ([AP_SWS_SHWA_00707], [AP_SWS_SHWA_00708], [AP_SWS_SHWA_00709]) с соответствующими геттерами и сеттерами координат ([AP_SWS_SHWA_00710], [AP_SWS_SHWA_00711]). Для манипулирования отдельными элементами массива Accessor предоставляет оператор индексации operator[] ([AP_SWS_SHWA_00009], [AP_SWS_SHWA_00010]), а также синхронизирующие методы Get() ([AP_SWS_SHWA_00012]) и Set() ([AP_SWS_SHWA_00011]). Передавая экземпляры PropertyList, можно декларативно добавлять специфические свойства памяти и атрибуты доступа ([AP_SWS_SHWA_00802], [AP_SWS_SHWA_00015], [AP_SWS_SHWA_00215]).
Определение задач, планирование заданий и выполнение через очереди
Выполнение вычислений на устройствах-ускорителях координируется через очереди команд типа Queue ([AP_SWS_SHWA_00902]). Queue связывается через свой фабричный метод Create() с определенным Device или DeviceSelector и опционально конфигурируется с ErrorHandler, а также PropertyList ([AP_SWS_SHWA_00908], [AP_SWS_SHWA_00909]). Метод GetDevice() возвращает вычислительное устройство, сопряженное с очередью ([AP_SWS_SHWA_00910]). Поведение очереди при выполнении можно проверить через IsInOrder() ([AP_SWS_SHWA_00911]): в случае очереди со строгим порядком (In-Order) поставленные в очередь вычислительные задачи обрабатываются строго последовательно (AUTOSAR_AP_EXP_SWArchitecture с. 133).
Определение конкретных рабочих нагрузок выполняется с помощью TaskHandler ([AP_SWS_SHWA_01202]). Обработчик задач различает атомарные одиночные задачи (SingleTask(), [AP_SWS_SHWA_01203]) и сетки параллельных по данным вычислений (ParallelFor(), [AP_SWS_SHWA_01204]). При этом цель выполнения можно задать через перечисление Target либо как ускоритель (kDevice), либо как хост-задачу CPU (kHostTask) ([AP_SWS_SHWA_00102]). Отправка в очередь выполняется через метод Queue::Submit() ([AP_SWS_SHWA_00912]). При более сложных конвейерах Submit() также поддерживает указание вторичной очереди для отображения зависимостей между различными аппаратными конвейерами ([AP_SWS_SHWA_00913], AUTOSAR_AP_SWS_SafeHardwareAcceleration с. 23).
Диаграмма последовательности: сквозной процесс выделения буфера, отправки ядра (Submit) и асинхронной синхронизации. Источники: AP_SWS_SHWA_00209, AP_SWS_SHWA_00909, AP_SWS_SHWA_00912, AP_SWS_SHWA_00604.
Событийная синхронизация и мониторинг состояния аппаратного обеспечения
Каждая отправка через Queue::Submit() возвращает объект Event, который служит асинхронным якорем синхронизации ([AP_SWS_SHWA_00912], [AP_SWS_SHWA_00602]). Вызывающая сторона может либо ожидать завершения аппаратного вычисления в блокирующем режиме с помощью Event::Wait() ([AP_SWS_SHWA_00604]), либо выполнить ограниченную по времени синхронизацию через WaitFor(ms) ([AP_SWS_SHWA_00606]). Несколько событий можно отслеживать агрегированно через Event::Wait(const Vector<Event>&) ([AP_SWS_SHWA_00605]). В качестве альтернативы сама очередь предлагает методы коллективной синхронизации: Queue::Wait() блокирует выполнение до тех пор, пока не будут обработаны все поставленные в очередь задачи ([AP_SWS_SHWA_00914]), тогда как Queue::WaitFor(ms) ограничивает ожидание заданным тайм-аутом ([AP_SWS_SHWA_00917]).
Чтобы обеспечить надежность и функциональную безопасность аппаратных ускорителей во время выполнения, shwa определяет компонент мониторинга DeviceMonitor ([AP_SWS_SHWA_01402]). Экземпляры создаются через статические методы Create() применительно к Device или DeviceSelector ([AP_SWS_SHWA_01407], [AP_SWS_SHWA_01408]). Через метод DeviceMonitor::Status() запрашивается текущее состояние аппаратного обеспечения ([AP_SWS_SHWA_01409]). Перечисление DeviceStatus включает четыре стандартизированных состояния: kReady (0, готов к работе), kNotAccesible (1, недоступен), kFailure (2, состояние ошибки) и kUnknown (255, статус не может быть определен) ([AP_SWS_SHWA_00103]). Этот механизм мониторинга формирует основу для анализа безопасности и мониторинга работоспособности согласно ISO 26262 (AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI с. 15).
Диаграмма состояний: жизненный цикл и переходы состояний DeviceStatus согласно ara::shwa::DeviceMonitor. Источники: AP_SWS_SHWA_00103, AP_SWS_SHWA_01409.
Поведение при ошибках и диагностика
Концепция обработки ошибок в shwa основана на специфичном для AUTOSAR домене ошибок ShwaErrorDomain ([AP_SWS_SHWA_01307]), который можно получить через GetShwaDomain() ([AP_SWS_SHWA_01311]). Специфические коды ошибок представляются стандартизированным перечислением ShwaErrorCode ([AP_SWS_SHWA_01301]). Сюда относятся фундаментальные ошибки времени выполнения, такие как kRuntime, прерывания вычислений на ускорителе, такие как kTaskExecutionFailure, ошибки выделения памяти, такие как kMemoryNotAllocated, нарушения целостности памяти, такие как kIntegrityCorrupted, временные конфликты ресурсов, такие как kResourceBusy, а также недопустимые режимы доступа, такие как kInvalidAccessMode ([AP_SWS_SHWA_01301]). Коды ошибок конструируются типобезопасным образом с помощью MakeErrorCode() ([AP_SWS_SHWA_01312]) и предоставляют текстовые описания через Name() и Message() ([AP_SWS_SHWA_01308], [AP_SWS_SHWA_01309]).
Ошибки при асинхронном выполнении или при ожидании событий (Event::Wait() или Queue::Wait()) оказывают серьезное влияние на целостность данных: если во время вычисления возникает kTaskExecutionFailure или kRuntime, затронутые операции не имеют семантики отката, а данные в связанных буферах считаются модифицированными неопределенным образом ([AP_SWS_SHWA_00604], [AP_SWS_SHWA_00914]). Для асинхронных уведомлений используется класс ErrorHandler, функция обратного вызова которого инициируется посредством HandleError() ([AP_SWS_SHWA_00507], [AP_SWS_SHWA_00508]). Если приложению требуется обработка исключений, ошибки можно преобразовать через ThrowAsException() в ShwaException ([AP_SWS_SHWA_01303], [AP_SWS_SHWA_01310]).
Дополнительные подробные подтверждения и ссылки на спецификацию
Архитектура и требования кластера shwa полностью подтверждены нормативными требованиями и соответствующими пояснительными документами. В таблице 1 обобщены ключевые концепции и их основные источники.
| Тематическая область | Важные элементы спецификации | Источники подтверждения |
|---|---|---|
| Архитектура & предоставление | Внутрипроцессная библиотека, функциональная классификация по категории Safety | AUTOSAR_AP_EXP_SWArchitecture S. 127, AUTOSAR_AP_EXP_SWArchitecture S. 132 |
| Топология & выбор | Platform, Device, DeviceSelector, GpuSelector, CpuSelector | [AP_SWS_SHWA_01107], [AP_SWS_SHWA_00308], [AP_SWS_SHWA_00403] |
| Память & доступ к данным | Buffer, Accessor, Range, Id, AccessMode | [AP_SWS_SHWA_00209], [AP_SWS_SHWA_00007], [AP_SWS_SHWA_01007], [AP_SWS_SHWA_00101] |
| Планирование заданий & синхронизация | Queue, TaskHandler, Event | [AP_SWS_SHWA_00908], [AP_SWS_SHWA_01202], [AP_SWS_SHWA_00604] |
| Мониторинг аппаратного обеспечения & ошибки | DeviceMonitor, DeviceStatus, ShwaErrorCode, ErrorHandler | [AP_SWS_SHWA_01407], [AP_SWS_SHWA_00103], [AP_SWS_SHWA_01301], [AP_SWS_SHWA_00507] |
Типичное инстанцирование конвейера и развязка нескольких очередей внутри приложения подробно проиллюстрированы в спецификации (SWS_SafeHardwareAcceleration с. 22, AUTOSAR_AP_SWS_SafeHardwareAcceleration с. 23). При этом строгое разделение ресурсов памяти и вычислений гарантирует детерминированное поведение в критически важных для безопасности автомобильных областях применения (AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI с. 15).
Настоящее руководство сгенерировано ассистентом курации ИИ на основе спецификации AUTOSAR Adaptive R25-11.
class: 18 function: 120 enumeration: 4 type alias: 3 header file: 15
Карта тем
Для этого релиза нет данных об элементах
ara::shwa
AcceleratorSelector manages accelerator selection for operations on HWA if available.
Accessor manages read and write access to allocated memory by Buffer. Designed as not copyable, since it’s owning resources. Intended to be managed exclusively by std::unique_ptr, which may be moved. ≙ std::unique_ptr
Buffer manages memory allocation for operations on the host or/and HWA. Designed as not copyable, since it’s owning resources. Intended to be managed exclusively by std::unique_ptr, which may be moved. ≙ std::unique_ptr
CpuSelector manages CPU selection for operations on HWA if available Allows to get a device from any supported backends for which the device type is CPU.
Device class represents HWA device. Provides access to the device but not controlling it. Designed as copyable since not owning resources.
DeviceMonitor API class. Designed as copyable since not owning resources.
Class allowing to choose the most appropriate device of the available ones. This is a callable object taking a device reference and returning an integer rank. One of the device with the highest non-negative value is selected.
ErrorHandler manages asynchronous error handling for operations on HWA.
Event class helps to manage task execution synchronization between HWA and Host application. Can be created only inside of the Queue otherwise it’s meaningless.
GpuSelector manages GPU selection for operations on HWA if available Select a device from any supported backends for which the device type is GPU.
Id API class. Designed as copyable since not owning resources.
Platform class is responsible for extracting different HWA platforms available for current application and listing Devices bind to each platform. Designed as copyable since not owning resources.
Property List class is designed to enable vendor specific SHWA functionality extension and adjustment. Properties are not standardized and can be defined by Vendor. Class using Property list is obliged to have HasProperty() and GetProperty() methods defined.
Queue API provides the functionality for parallel processing on selected Device. Designed as not copyable, since it’s owning resources. Intended to be managed exclusively by std::unique_ ptr, which may be moved. ≙ std::unique_
Defines size of Buffer for one, two or three dimensions. Designed as copyable since not owning resources.
Defines the error domain for Safe Hardware Acceleration.
Exception type could be thrown by application or other FC using Safe Hardware Acceleration. Safe Hardware Acceleration API is exception free and can only return an ErrorCode, but user code can transform this error to exception and throw if it’s alligned with system error handling architecture.
Handles tasks execution on the selected Device Can be created only inside of the Queue otherwise it’s meaningless.
Liest die durch die Signatur bezeichnete Information oder Eigenschaft aus dem Objekt.
constexpr const ara::core::ErrorDomain & GetShwaDomain () noexcept;Die Spezifikation definiert diese Deklaration mit der in der Signatur ausgewiesenen Semantik.
constexpr ara::core::ErrorCode MakeErrorCode (ShwaErrorCode code, ara::core::ErrorDomain::SupportDataType data) noexcept;Die Enumeration definiert die folgenden standardisierten Werte.
enum class AccessMode : std::uint32_t {...};Die Enumeration definiert die folgenden standardisierten Werte.
enum class DeviceStatus : std::uint32_t {...};Die Enumeration definiert die folgenden standardisierten Werte.
enum class ShwaErrorCode : ara::core::ErrorDomain::CodeType {...};Die Enumeration definiert die folgenden standardisierten Werte.
enum class Target : std::uint32_t {...};Пространства имён
- ara::shwa 18 Klassen, 2 freie Funktionen, 4 Enumerationen
Архитектурное взаимодействие
Klickbare Knoten führen zu den Klassenseiten. Quellen: SWS SHWA §7.1, SWS SHWA §7.3, SWS SHWA §7.6. Teilweise Interpretation: Die Kollaboration verdichtet die in den Quellen separat beschriebenen Rollen.
Заголовочные файлы (глава 8)
ara/shwa/accessor.h[AP_SWS_SHWA_00000] текст ещё не импортированara/shwa/buffer.h[AP_SWS_SHWA_00200] текст ещё не импортированara/shwa/device.h[AP_SWS_SHWA_00300] текст ещё не импортированara/shwa/device_monitor.h[AP_SWS_SHWA_01400] текст ещё не импортированara/shwa/device_selector.h[AP_SWS_SHWA_00400] текст ещё не импортированara/shwa/error_handler.h[AP_SWS_SHWA_00500] текст ещё не импортированara/shwa/event.h[AP_SWS_SHWA_00600] текст ещё не импортированara/shwa/id.h[AP_SWS_SHWA_00700] текст ещё не импортированara/shwa/platform.h[AP_SWS_SHWA_01100] текст ещё не импортированara/shwa/property_list.h[AP_SWS_SHWA_00800] текст ещё не импортированara/shwa/queue.h[AP_SWS_SHWA_00900] текст ещё не импортированara/shwa/range.h[AP_SWS_SHWA_01000] текст ещё не импортированara/shwa/shwa_enums.h[AP_SWS_SHWA_00100] текст ещё не импортированara/shwa/shwa_error_domain.h[AP_SWS_SHWA_01300] текст ещё не импортированara/shwa/task_handler.h[AP_SWS_SHWA_01200] текст ещё не импортирован
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал