模块 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 外,其他功能集群(例如图像处理或感知集群)也可以直接集成 shwa 的 C++ 接口以用于高度并行的 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。
使用 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页)。
时序图:缓冲区分配、内核提交(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页)。
状态图:根据 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 生成。
为异构加速计算提供满足功能安全要求的高性能进程内设备抽象、任务分发与内存管理机制。
AUTOSAR Adaptive 安全硬件加速(shwa)以进程内库形式为 GPU、NPU 等异构计算资源提供满足功能安全要求的统一抽象,支持基于 DeviceSelector 的设备探测与 Queue 命令队列的任务分发 AUTOSAR_AP_EXP_SWArchitecture 第127页 [AP_SWS_SHWA_00908]。它通过 Buffer、Range 与受控的 Accessor 实施类型安全的数据读写,并借助 DeviceMonitor 与 Event 同步原语保障硬件状态监控与异步计算的确定性 [AP_SWS_SHWA_00007] [AP_SWS_SHWA_01409]。
在 AUTOSAR Adaptive Platform (AP) 中,安全硬件加速(Safe Hardware Acceleration,shwa)作为 Safety 类别的非守护进程库(In-Process Library)运行,直接集成于应用进程空间以规避 IPC 通信开销 AUTOSAR_AP_EXP_SWArchitecture 第127页 AUTOSAR_AP_EXP_SWArchitecture 第132页。它为 GPU、NPU、DSP 及 FPGA 等异构计算资源提供统一的面向对象 C++ 抽象,支撑高并发异构任务调度与零拷贝数据交互。
应用程序首先通过 Platform 与多态 DeviceSelector(如 GpuSelector、CpuSelector)枚举并匹配目标硬件,然后实例化命令队列 Queue 绑定至物理设备 [AP_SWS_SHWA_01107] [AP_SWS_SHWA_00309] [AP_SWS_SHWA_00908]。内核任务通过 TaskHandler 封装为 SingleTask 或 ParallelFor 并提交(Submit)至队列,返回的 Event 具备超时限制(WaitFor)与阻塞等待能力,从而实现确定性的异步作业同步 [AP_SWS_SHWA_01204] [AP_SWS_SHWA_00912] [AP_SWS_SHWA_00606]。
时序图: 展现从硬件选择、任务分发到事件同步的核心执行流程。Quellen: [AP_SWS_SHWA_01107]、[AP_SWS_SHWA_00909]、[AP_SWS_SHWA_01204]、[AP_SWS_SHWA_00912]、[AP_SWS_SHWA_00604]
在内存管理方面,shwa 结合几何区间 Range 与多维坐标 Id 管理强类型 Buffer,并要求应用通过轻量级访问器 Accessor 实施权限受控的数据读写(AccessMode),避免裸指针暴露 [AP_SWS_SHWA_01007] [AP_SWS_SHWA_00209] [AP_SWS_SHWA_00007]。此外,模块通过 DeviceMonitor 追踪底层硬件状态(DeviceStatus),并依托规范化错误码 ShwaErrorCode 与 ErrorHandler 异步回调机制,构建严格满足 ISO 26262 要求的故障隔离防护体系 [AP_SWS_SHWA_01407] [AP_SWS_SHWA_00103] [AP_SWS_SHWA_01301]。
角色定位与安全计算体系边界
在 AUTOSAR Adaptive Platform (AP) 架构中,安全硬件加速(Safe Hardware Acceleration,简称 shwa)是归属于 Safety 类别的核心功能集群,如架构设计所示 AUTOSAR_AP_EXP_SWArchitecture 第127页。与基于独立守护进程运行的平台健康管理(Platform Health Management)不同,shwa 采用进程内库(Non-daemon-based library)形态交付,直接嵌入在应用程序或其它功能集群的运行空间中 AUTOSAR_AP_EXP_SWArchitecture 第132页。这种设计解读:能够在规避进程间通信(IPC)延迟开销的同时,为诸如自动驾驶感知、多传感器融合与深度神经网络推理等高算力异构工作负载提供微秒级响应与确定性执行环境。
shwa 的核心目标是向上层 Adaptive Application 以及机器视觉、感知等功能集群屏蔽底层物理芯片(GPU、NPU、DSP、FPGA 及高性能多核 CPU)的专有驱动与体系结构差异,建立符合 ISO 26262 功能安全要求的标准抽象模型 AUTOSAR_AP_SWS_SafeHardwareAcceleration 第17页。典型应用中,一个应用进程可以并发实例化并绑定多个加速队列、逻辑设备与多维内存缓冲区,实现复杂异构计算管线的高度解耦与协同 SWS_SafeHardwareAcceleration 第23页。
系统架构上下文图: 展示 Safe Hardware Acceleration 在进程空间内的分层结构及其对异构计算硬件的抽象协同。Quellen: AUTOSAR_AP_EXP_SWArchitecture 第127页、第132页;SWS_SafeHardwareAcceleration 第23页
硬件拓扑探测、设备发现与选择机制
异构加速计算生命周期的第一步是硬件平台的探测与分类。shwa 提供了静态工厂入口 Platform::GetPlatforms(),用于枚举宿主环境中的物理计算平台,并允许通过 Platform::GetDevices() 进一步查询各平台下属的物理设备实例 [AP_SWS_SHWA_01107] [AP_SWS_SHWA_01108]。所有核心对象均禁止直接栈构造或拷贝构造(构造函数受保护或私有),统一采用具名工厂模式并以 ara::core::Result 返回受检结果,确保构造阶段的确定性 EXP_SafeHardwareAccelerationAPI 第15页 [AP_SWS_SHWA_01102]。
获取逻辑设备 Device 时,开发者可以通过 Device::Create() 构建通用默认设备,亦可传入多态选择器 DeviceSelector 实现目标驱动的精细化匹配 [AP_SWS_SHWA_00308] [AP_SWS_SHWA_00309]。标准提供了预置的具体选择策略,包括用于筛选图形计算单元的 GpuSelector、用于通用多核的 CpuSelector 以及面向专用硬件加速卡(如 NPU/FPGA)的 AcceleratorSelector [AP_SWS_SHWA_00406] [AP_SWS_SHWA_00409] [AP_SWS_SHWA_00412]。设备实例随后支持通过 IsCpu()、IsGpu()、IsAccelerator() 及模板方法 GetInfo() 反射其硬件属性与架构能力 [AP_SWS_SHWA_00310] [AP_SWS_SHWA_00311] [AP_SWS_SHWA_00312] [AP_SWS_SHWA_00313]。
任务编排、命令队列与异步分发模型
任务调度的核心实体为命令队列 Queue。每个队列与特定的 Device 绑定,负责管理待调度执行的计算图或算子指令流 AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI 第14页。应用程序可通过传入设备实例或设备选择器以及绑定的 ErrorHandler 来创建队列,并通过 PropertyList 定制队列属性 [AP_SWS_SHWA_00908] [AP_SWS_SHWA_00909] [AP_SWS_SHWA_00802]。队列支持严格保序执行或根据硬件特性乱序执行,可通过 IsInOrder() 查询其定序语义 [AP_SWS_SHWA_00911]。
在作业提交阶段,TaskHandler 封装了具体的核函数分发逻辑,支持单任务分发 SingleTask() 以及大规模数据并行的 ParallelFor() 迭代调度 [AP_SWS_SHWA_01202] [AP_SWS_SHWA_01203] [AP_SWS_SHWA_01204]。任务可以通过 Queue::Submit() 提交至设备,并立即返回一个用于追踪执行进度的同步事件 Event [AP_SWS_SHWA_00912]。此外,Submit() 重载允许关联二级辅助队列 secondaryQueue,这可能用于构建跨设备流水线的阶段性任务链依赖传递 [AP_SWS_SHWA_00913]。
时序图: 展示从硬件探测、队列绑定、内核提交到事件同步的完整任务执行生命周期。Quellen: [AP_SWS_SHWA_01107]、[AP_SWS_SHWA_00909]、[AP_SWS_SHWA_01204]、[AP_SWS_SHWA_00912]、[AP_SWS_SHWA_00604]
任务完成的同步由事件体系保证:应用不仅可使用 Event::Wait() 进行阻塞等待,亦可通过带超时的 Event::WaitFor(ms) 实施安全时间边界守卫,或通过静态方法 Event::Wait(eventList) 等待复合依赖事件集全部就绪 [AP_SWS_SHWA_00604] [AP_SWS_SHWA_00605] [AP_SWS_SHWA_00606]。队列层级也提供了整队排空的阻塞同步接口 Queue::Wait() 与带时限的 Queue::WaitFor() [AP_SWS_SHWA_00914] [AP_SWS_SHWA_00917]。
多维数据抽象、缓冲区管理与安全访问器
为了在主机与异构加速器之间高效、安全地共享与交换内存,shwa 抽象了强类型的空间范围 Range、离散坐标 Id 以及内存存储器 Buffer AUTOSAR_AP_EXP_SafeHardwareAccelerationAPI 第15页。Range 模板通过静态 Create() 工厂支持一维到三维空间的几何规格定义,并提供维度读取接口 [AP_SWS_SHWA_01007] [AP_SWS_SHWA_01008] [AP_SWS_SHWA_01009] [AP_SWS_SHWA_01010]。相应地,Id 封装了特定维度空间内的离散索引坐标点 [AP_SWS_SHWA_00707] [AP_SWS_SHWA_00710]。
Buffer 负责管理异构内存块的生命周期。为了适应零拷贝与确定性内存策略,Buffer::Create() 提供了多种构造重载:既支持自主申请托管内存,也支持由用户传入自定义分配器 AllocatorT,或直接封装外部预分配的主机内存指针(可读写或只读) [AP_SWS_SHWA_00209] [AP_SWS_SHWA_00210] [AP_SWS_SHWA_00211] [AP_SWS_SHWA_00213]。Buffer 拥有数据主权,其自身不可拷贝与移动 [AP_SWS_SHWA_00203] [AP_SWS_SHWA_00205]。
应用进程无法直接对 Buffer 进行裸指针解引用,必须借助访问器 Accessor AUTOSAR_AP_EXP_SWArchitecture 第135页。Accessor 通过引用 Buffer 或同时关联 TaskHandler 构造生成,严格执行 AccessMode 权限校验(kRead、kWrite、kReadWrite)与类型安全别名映射 [AP_SWS_SHWA_00007] [AP_SWS_SHWA_00008] [AP_SWS_SHWA_00101] [AP_SWS_SHWA_00014]。元素级别读写受 Get() 与 Set() 的边界与资源锁保护,而高性能计算内核亦可通过下标操作符 operator[] 快速读取引用 [AP_SWS_SHWA_00009] [AP_SWS_SHWA_00011] [AP_SWS_SHWA_00012]。
时序图: 展示基于 Buffer、Range 与 Accessor 的安全内存管理与多维索引访问流程。Quellen: [AP_SWS_SHWA_01007]、[AP_SWS_SHWA_00209]、[AP_SWS_SHWA_00007]、[AP_SWS_SHWA_00011]
运行监控与硬件状态机转换
在汽车安全关键场景中,异构加速器可能因过热、瞬态硬件故障或总线失联而失效。为此,shwa 引入了设备监控器 DeviceMonitor,负责对加速硬件执行实时健康监控 [AP_SWS_SHWA_01407] [AP_SWS_SHWA_01408]。DeviceMonitor 支持拷贝与移动操作,允许被安全传递给监控工作线程或后台守护模块 [AP_SWS_SHWA_01403] [AP_SWS_SHWA_01405]。
通过调用 DeviceMonitor::Status(),上层系统能够获悉底层硬件的即时运行状态枚举 DeviceStatus [AP_SWS_SHWA_01409]。枚举包含了标准定义的四大状态类别:kReady(设备可用就绪)、kNotAccesible(设备暂时不可访问)、kFailure(设备处于严重硬件失效或错误状态)以及 kUnknown(状态未知) [AP_SWS_SHWA_00103]。状态的迁移反映了底层硬件的健康变化,构成了安全状态机的重要输入。
状态图: 展示 DeviceStatus 枚举所对应的设备物理健康状态机迁移模型。Quellen: [AP_SWS_SHWA_00103]、[AP_SWS_SHWA_01409]
行为规则、操作约束与配置集成
在多线程环境与安全生命周期下,shwa 实施了严格的操作规则与资源排他性控制:
- 对象生命周期排他性与移动语义:为防止悬空指针与双重释放,除
Device、Id、Range与DeviceMonitor支持标准值语义移动/拷贝外,所有持有底层物理资源或内存的类(Buffer、Queue、Accessor、ErrorHandler、Platform)均显式删除了拷贝构造与拷贝赋值操作符 [AP_SWS_SHWA_00203] [AP_SWS_SHWA_00903] [AP_SWS_SHWA_00003] [AP_SWS_SHWA_00503]。 - 线程安全保证边界:工厂创建方法(如
Buffer::Create、Queue::Create、Accessor::Create)在底层资源未冲突的前提下满足线程安全保证;然而,具体实例的非 const 变异操作(如Id::Set、Accessor::operator[]以及事件等待)通常标记为 not thread-safe,应用必须通过工作队列隔离或外部同步原语保证并发安全性 [AP_SWS_SHWA_00007] [AP_SWS_SHWA_00009] [AP_SWS_SHWA_00711]。 - 属性列表扩展(PropertyList):在队列、缓冲区及访问器创建时,均可注入基于变参模板构建的
PropertyList,用于传递专有部署元数据(如缓存一致性标志、特定硬件内存域偏好等) [AP_SWS_SHWA_00802] [AP_SWS_SHWA_00215] [AP_SWS_SHWA_00915]。
故障与错误处理行为
shwa 严格遵循 AUTOSAR 确定性错误处理规范,在非异常通道上通过 ara::core::Result 返回受检错误,同时配备了专用的异常类 ShwaException 与错误领域 ShwaErrorDomain [AP_SWS_SHWA_01303] [AP_SWS_SHWA_01307] [AP_SWS_SHWA_01311]。模块标准化了核心故障枚举 ShwaErrorCode,覆盖硬件加速生命周期各阶段的异常:
| 错误码 (ShwaErrorCode) | 含义与触发场景 | 规范回滚语义 |
|---|---|---|
kRuntime |
通用底层运行时错误,硬件执行遇到未预期故障。 | 部分接口支持回滚;任务执行失败时关联数据判定为处于非预期破坏状态 [AP_SWS_SHWA_00604]。 |
kTaskExecutionFailure |
计算内核或图执行过程中发生严重执行崩溃或超时。 | 无回滚保证(no_rollback_semantics),使用的数据视为损坏 [AP_SWS_SHWA_00604]。 |
kMemoryNotAllocated |
加速器显存或主机共享内存空间耗尽,缓冲区分配失败。 | 支持回滚,不破坏现有已分配内存状态 [AP_SWS_SHWA_00209]。 |
kResourceBusy |
目标计算单元、通道或内存正被其它队列占用。 | 支持回滚,调用方可重试或选择备用设备 [AP_SWS_SHWA_00308]。 |
kInvalidAccessMode |
访问器请求的读写权限与底座缓冲区或文件模式发生冲突。 | 操作被拒绝,无副作用回滚 [AP_SWS_SHWA_00011]。 |
针对异步执行过程中发生的核错误,Queue 与 Submit 集成了 ErrorHandler 回调机制 [AP_SWS_SHWA_00507] [AP_SWS_SHWA_00912]。当硬件调度或核函数运行引发异步中断时,底层运行时触发 ErrorHandler::HandleError(),将错误分派至预设处理函数,避免导致主控制流不可控崩塌 [AP_SWS_SHWA_00508]。
进阶规范条目与参考凭证
为了便于对系统实现与安全要求进行工程追踪,下表汇总了关键功能主题对应的规范要求与设计凭证索引:
- 内存与访问控制:缓冲区抽象与构造约束定义在 [AP_SWS_SHWA_00209] 至 [AP_SWS_SHWA_00214];访问器生命周期与数据读写权限规范详见 [AP_SWS_SHWA_00007] 与 [AP_SWS_SHWA_00011]。架构模型可参考 AUTOSAR_AP_EXP_SWArchitecture 第135页。
- 设备探测与选择策略:平台枚举与设备解析依据 [AP_SWS_SHWA_01107] 及 [AP_SWS_SHWA_00309];针对 GPU、CPU、加速卡的专门选择策略遵循 [AP_SWS_SHWA_00406]、[AP_SWS_SHWA_00409] 与 [AP_SWS_SHWA_00412]。
- 队列执行与异步同步:队列构造与保序查询参见 [AP_SWS_SHWA_00908] 与 [AP_SWS_SHWA_00911];任务核提交与事件同步规范遵循 [AP_SWS_SHWA_00912]、[AP_SWS_SHWA_01204] 及 [AP_SWS_SHWA_00604]。
- 状态监视与错误域管理:设备健康监视依据 [AP_SWS_SHWA_01407] 与状态定义 [AP_SWS_SHWA_00103];标准错误码、错误域及异常设施见 [AP_SWS_SHWA_01301] 至 [AP_SWS_SHWA_01312]。
本指南由 autodocs 依据 AUTOSAR 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 · 德文原文