DEENESPTFRRUARHIKOZHNL

模块 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.

模块指南人工智能生成

实现对异构硬件加速器的安全、标准化使用,以进行数据并行计算。
AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: cc6d229c7f27 来源 未决问题(1)
因果锚点:R25-11 自 R25-11 起有效 为此规范版本重新合成。
译自德文指南AI 生成gemini-3.8-flash-low · 2026-10-13 · 德文原文

实现对异构硬件加速器的安全、标准化使用,以进行数据并行计算。

自适应集群 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])。

缓冲区分配、内核提交与同步ApplicationBufferQueueTaskHandler事件Use Case: 缓冲区与队列准备Create(bufferRange, propList)Result<unique_ptr<Buffer>>Create(device, errorHandler)Result<unique_ptr<Queue>>Use Case: 任务定义与提交ParallelFor(bufferSize, cfg)Submit(cfg, handler)Create()Result<Event>Use Case: SynchronisationWait()Result<void>

时序图:缓冲区分配、内核提交(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 外,其他功能集群(例如图像处理或感知集群)也可以直接集成 shwa 的 C++ 接口以用于高度并行的 HPC 工作负载(SWS_SafeHardwareAcceleration 第23页)。

SafeHardwareAccelerationArchitecture cluster_app_process POSIX Process (Adaptive Application / Functional Cluster) cluster_shwa_lib ara::shwa (In-Process Library) cluster_hardware Hardware Targets app Application Logic platform Platform & Device Management (Platform, Device, DeviceSelector) app->platform memory Data Management (Buffer, Accessor, Range, Id) app->memory execution Task Execution & Scheduling (Queue, TaskHandler, Event) app->execution safety Safety & Health Monitoring (DeviceMonitor, ErrorHandler) app->safety platform->execution memory->execution gpu GPU execution->gpu npu NPU / VPU execution->npu dsp DSP / FPGA execution->dsp cpu Host CPU execution->cpu safety->gpu safety->npu

上下文图: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])。

拓扑查询与计算设备创建ApplicationPlatformDeviceSelectorDeviceGetPlatforms()Result<Vector<Platform>>GetDevices()Result<Vector<Device>>Use Case: 选择与实例化SelectDevice()Result<Device>Create(deviceSelector)Result<Device>

时序图:拓扑发现、计算目标选择与逻辑设备实例化。来源:AP_SWS_SHWA_01107、AP_SWS_SHWA_01108、AP_SWS_SHWA_00407、AP_SWS_SHWA_00309。

使用 Buffer 与 Accessor 进行内存管理与多维数据访问

对于异构架构上的并行计算操作,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])及其相应的坐标 getter 和 setter([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页)。

缓冲区分配、内核提交与同步ApplicationBufferQueueTaskHandler事件Use Case: 缓冲区与队列准备Create(bufferRange, propList)Result<unique_ptr<Buffer>>Create(device, errorHandler)Result<unique_ptr<Queue>>Use Case: 任务定义与提交ParallelFor(bufferSize, cfg)Submit(cfg, handler)Create()Result<Event>Use Case: SynchronisationWait()Result<void>

时序图:缓冲区分配、内核提交(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页)。

DeviceStatusLifecycle Init kReady kReady (0) Init->kReady kNotAccesible kNotAccesible (1) kReady->kNotAccesible Hardware getrennt / belegt kFailure kFailure (2) kReady->kFailure Hardwarefehler / Timeout kUnknown kUnknown (255) kReady->kUnknown Status unbestimmbar kNotAccesible->kReady Wiederhergestellt kNotAccesible->kFailure Schwerer Defekt kFailure->kUnknown Status unbestimmbar kUnknown->kReady Status revalidiert

状态图:根据 ara::shwa::DeviceMonitor 的 DeviceStatus 生命周期和状态转换。来源: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页)。

本指南由 AI 策展助手基于 AUTOSAR Adaptive 规范 R25-11 生成。

Spezifikation: AUTOSAR_AP_SWS_SafeHardwareAcceleration.pdf (R25-11) · 160 API-Records

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 类

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 类

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 类

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 类

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 类

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_

Range 类

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;
AccessMode 枚举

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 {...};
Target 枚举

Die Enumeration definiert die folgenden standardisierten Werte.

enum class Target : std::uint32_t {...};

命名空间

架构协作

G Zusammenspiel bei einer Task-Einreichung app Adaptive Application buf Buffer app->buf 1: Create(range) acc Accessor app->acc 3: Create(buffer, handler) queue Queue app->queue 2: Create(device, error handler) app->queue 4: Submit(lambda) queue->app 7: Result<Event> handler TaskHandler queue->handler 5: invoke task device Device handler->device 6: ParallelFor / SingleTask error ErrorHandler device->error 6a: async error (if any)

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 章)