AUTOSAR_AP_EXP_SafeAPIHardwareAccelerators
FIG-cd21ef77d1976c57
932 × 577 px
3 Release(s)
Figure 5.1: Class diagram
SHA-256 Inhalts-Fingerabdruck:
cd21ef77d1976c57526ce035c0a731bb68a8c672ef508a661afa097266a657e9
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Diagrammtyp: UML-Klassendiagramm mit Schichtenarchitektur (Drei-Ebenen-Gliederung).
- Technischer Zweck: Spezifikation des objektorientierten C++-API-Designs für heterogene Rechenbeschleuniger (GPU, FPGA, DSP, NPU) im Kontext der AUTOSAR Adaptive Platform (
AUTOSAR_AP_EXP_SafeAPIHardwareAccelerators). Das Konzept adaptiert moderne heterogene Programmiermodelle (analog zu Khronos SYCL/OpenCL), bindet diese jedoch an das sicherheitsgerichtete, deterministische AUTOSAR-Adaptive-Fundament an (ara::core::Result, Health Monitoring, deterministisches Queueing). - Schichtenunterteilung:
- Data storage and management (Speicherabstraktion, N-dimensionale Adressierung, Zugriffsschutz).
- Task execution (Asynchrone Auftragsplanung, Kernel-Dispatch, Synchronisation via Events).
- Device management and monitoring (Hardware-Topologie-Erkennung, Beschleuniger-Klassifizierung und Laufzeitüberwachung gem. ISO 26262).
2. Komponenten, Entitäten & Schnittstellen
Ebene 1: Data Storage and Management
Range<Dimensions: int>(Template-Klasse):- Definiert den N-dimensionalen Indexraum (1D bis 3D) für Pufferallokation und parallele Iterationsräume.
- Fabrikmethoden / API:
Create(size_t dim0),Create(size_t dim0, size_t dim1),Create(size_t dim0, size_t dim1, size_t dim2)(jeweils mit RückgabeResult<Range>), Dimensions-GetterGetDimension0/1/2(): size_t.
Id<Dimensions: int>(Template-Klasse):- Repräsentiert den diskreten N-dimensionalen Indexpunkt innerhalb eines
Range. - Fabrikmethoden / API: Überladene
Create(...)-Methoden (Result<Id>),Get(size_t dimension): size_t,Set(size_t dimension, size_t index): void.
- Repräsentiert den diskreten N-dimensionalen Indexpunkt innerhalb eines
Buffer<T: DataType, Dimensions: int>(Template-Klasse):- Kapselt typsichere Nutzdaten im Host- und Device-Speicher unabhängig vom Adressraum.
- Fabrikmethoden / API:
Create(Range<Dimensions>): Result<Buffer>. - Abhängigkeiten: Nutzt (
<<use>>)Range. Befreundet mit (<<friend>>)Accessor.
Accessor<T: DataType, Dimensions: int>(Template-Klasse):- Realisiert kontrollierten Lese-/Schreibzugriff auf
Buffer-Instanzen unter Vermeidung von Aliasing- und Concurrency-Konflikten. - Fabrikmethoden / API:
Create(Buffer<T, Dimensions>): Result<Buffer>,Create(Buffer<T, Dimensions>, TaskHandler): Result<Buffer>,Set(Id<Dimensions>, T): void,Get(Id<Dimensions>): T. - Abhängigkeiten: Nutzt (
<<use>>)IdundTaskHandler.
- Realisiert kontrollierten Lese-/Schreibzugriff auf
Ebene 2: Task Execution
TaskHandler:- Kapselt die Kernel-Logik und bindet Pufferzugriffe an den Ausführungsbefehl.
- API:
Create(): Result<TaskHandler>,SingleTask(lambda_task): void(singuläre Kernel-Ausführung),ParrallelFor(Range<Dimensions>, lambda_task): void(vektorisierte/parallele Ausführung über einen Indexraum). - Beziehungen: Nutzt (
<<use>>)Rangezur Iterationsdefinition; aggregiert überAccessor.
Queue:- Zentrale Command-Queue zur Serialisierung und Übertragung von Aufgaben an das Zielgerät.
- API:
Create(DeviceSelector): Result<Queue>,Submit(TaskHandler): Result<Event>,Wait(): void. - Beziehungen:
- Komposition (
1zu1..*) gegenüberTaskHandler: Eine Queue hält die zu dispatchenden Tasks. - Nutzt (
<<use>>)Buffer(Speichersynchronisation Host/Device) undDevice(Hardwarebindung). - Nutzt (
<<use>>)Eventzur Signalisierung der Fertigstellung.
- Komposition (
Event:- Asynchrones Synchronisationsprimitiv zur Abbildung des Execution-DAGs (Dependencies).
- API:
Create(): Result<Event>,GetWaitList(): Vector<Event>, blockierende MethodenWait(): voidundWait(Vector<Event>): void.
Ebene 3: Device Management and Monitoring
Platform:- Repräsentiert die Heterogenitätsplattform (Host-SoC plus Beschleunigerumgebung).
- API:
static GetPlatforms(): Vector<Platform>,GetDevices(): Vector<Device>,IsHost(): Result<bool>. - Beziehungen: Komposition (
1zu1..*) gegenüberDevice.
Device:- Abstraktion des konkreten physikalischen oder logischen Compute-Cores.
- API:
Create(DeviceSelector): Result<Device>,GetInfo(): Result<DeviceInfo>, KlassifiziererIsCpu(): Result<bool>,IsGpu(): Result<bool>,IsAccelerator(): Result<bool>. - Beziehungen: Komposition (
1zu1) mitDeviceMonitor.
DeviceMonitor:- Diagnostische Schnittstelle für Safety- und Health-Management (PHM / Platform Health Management).
- API:
CurrentLoad(): Result<DeviceLoadStatus>,HealthStatus(): Result<DeviceHealthStatus>,DeviceFailure(): Result<bool>,RuntimeError(): Result<DeviceRuntimeError>. - Beziehungen: Nutzt (
<<use>>)Queuezur Überwachung laufender Execution-Pipelines.
3. Dynamisches Verhalten & Sequenzablauf
- Hardware-Discovery & Queue-Erzeugung:
- Abfrage verfügbarer Plattformen via
Platform::GetPlatforms(). - Selektion des Zielgeräts (
Device) überDeviceSelectorund Instanziierung einerQueuemittelsQueue::Create(DeviceSelector).
- Abfrage verfügbarer Plattformen via
- Speicher-Allokation:
- Definition des Datenformats und der Dimensionen via
Range::Create(...). - Instanziierung des
Buffer<T, Dim>::Create(...)auf Host-Seite.
- Definition des Datenformats und der Dimensionen via
- Task-Zusammenstellung:
- Instanziierung eines
TaskHandler::Create(). - Definition der Berechtigung über
Accessor<T, Dim>::Create(buffer, taskHandler). - Übergabe des Rechenkernels über
TaskHandler::SingleTask(...)oderTaskHandler::ParrallelFor(...)unter Nutzung von Lambda-Expressions.
- Instanziierung eines
- Dispatching & Asynchrone Ausführung:
- Submit an die Hardware über
Queue::Submit(taskHandler). Der Aufruf ist nicht-blockierend und liefert synchron einResult<Event>zurück. - Der
Accessorstellt sicher, dass Daten bei Bedarf transparent auf den Device-Speicher übertragen werden (DMA/Shared Memory).
- Submit an die Hardware über
- Synchronisation & Fehlerbehandlung:
- Synchronisation wahlweise über
Event::Wait()/Queue::Wait()oder Verknüpfung im Execution-Graph (GetWaitList()). - Überwachung von Hardwarezustand, Überlast und Laufzeitfehlern im Hintergrund über
DeviceMonitor.
- Synchronisation wahlweise über
4. Normative Relevanz & Entwickler-Hinweise
- Fehlerbehandlungsmodell (
ara::core::Result):- Sämtliche Fabrik- und Abfragemethoden geben
Result<T>zurück. Embedded-Entwickler müssen strikt monadic checking (HasValue(),InspectError()) anwenden; C++-Exceptions sind auf AUTOSAR Adaptive im sicherheitskritischen Umfeld typischerweise deaktiviert.
- Sämtliche Fabrik- und Abfragemethoden geben
- ISO-26262-Konformität & Safety-Isolation:
DeviceMonitorschlägt die Brücke zum AUTOSAR Platform Health Management (PHM). Bei Rückgabe vonDeviceFailure() == trueoder determinierbarenRuntimeError()-Codes muss die Applikation in einen sicheren Zustand (Degradation / Fallback auf Host-CPU) übergehen.
- Speicherzugriff & Aliasing-Vermeidung:
- Direkter Speicherzugriff auf
Bufferist unterbunden (gekapselt via<<friend>> Accessor). Entwickler dürfen Puffer ausschließlich über typisierteAccessor-Instanzen manipulieren, um Race Conditions zwischen Host-CPU und Accelerator-Kernen auszuschließen.
- Direkter Speicherzugriff auf
- DeviceSelector & Deterministisches Deployment:
- Die Entkopplung von
QueueundDeviceviaDeviceSelectorerlaubt es, Kernels zur Entwurfszeit portabel zu halten und hardwareabhängig (CPU-Fallback vs. GPU/NPU-Beschleunigung) erst zur Laufzeit bindend zuzuordnen.
- Die Entkopplung von
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.