--- tags: [] aliases: - 架构设计变更通知 (ECN) date created: 星期五, 十一月 21日 2025, 3:35:31 下午 date modified: 星期五, 十一月 21日 2025, 3:36:41 下午 --- # 架构设计变更通知 (ECN) - 编号: ECN-2025-001 - 主题: 显控架构扁平化调整与 GPU 资源仲裁策略简化 - 适用范围: 2.3.5 章节及相关模块接口 - 日期: 2025-11-21 ## 1. 变更背景与动因 (Motivation) - **原设计假设**: 显控终端采用 3D 实时渲染(如 OpenGL/Vulkan 绘制雷达波束体或复杂地形),会大量占用 GPU 渲染管线和显存带宽,需通过抢占式调度防止 TDR。 - **修正后基线**: 显控终端确认为 **扁平化 2D 平面显示**(如 Qt/GDI 绘制 B-Scan/PPI 图像)。此类渲染对 GPU 资源消耗极低(< 1%),且主要由操作系统的桌面窗口管理器(DWM/X11)处理,**不与 CUDA 计算核心产生实质性竞争**。 - **变更目标**: 移除为 UI 响应性服务的复杂抢占调度逻辑,释放被“任务切分”和“优先级切换”占用的系统开销,回归**计算吞吐量优先**的设计策略。 ## 2. 核心变更点 (Core Changes) |**变更项**|**原设计 (Deprecated)**|**新设计 (New Baseline)**|**收益**| |---|---|---|---| |**仲裁触发源**|显控终端发送 `RequestHighPriorityGpuAccess`。|**移除显控触发源**。保留“温度/功耗过载”作为唯一降级触发源。|消除 UI 交互对后台计算的非必要打断。| |**任务调度**|细粒度切分 (`ISegmentableTask`),支持 <10ms 响应。|**粗粒度批处理**。移除强制切分要求,Kernel 允许长时运行。|减少 Kernel 启动开销,提升 GPU 流水线饱和度。| |**CUDA 流策略**|双优先级流(High/Low)动态切换。|**单一计算流池**。默认全速运行,仅在热保护时通过 `usleep` 或空闲插入进行节流。|简化流管理逻辑,降低上下文切换风险。| --- ## 3. 修订后的 2.3.5 章节规范 该章节标题由“资源仲裁与抢占式优先级控制”变更为 **“2.3.5 系统负载保护与热节流控制”**。 - 2.3.5 系统负载保护与热节流控制 (System Load Protection & Thermal Throttling) - **核心指向**:鉴于显控架构的扁平化,控制平面的资源管理重心从“UI 响应性保障”转移至 **“系统物理安全保障”**。接口仅用于在极端工况(如机箱温度过高、GPU 功耗触顶)下,强制降低计算负载以保护硬件。 ## 3.1 交互协议变更 - **废弃事件**: - `RequestHighPriorityGpuAccessEvent` (已移除) - `HighPriorityGpuAccessFinishedEvent` (已移除) - **保留并重定义事件**: - `SystemOverloadEvent { Type: THERMAL | POWER, Level: WARNING | CRITICAL }`: 由 `MonitoringModule` 发布。 - `SetComputeThrottleEvent { ThrottleLevel level }`: 由 `ResourceCoordinator` 决策后发布。 - `Level 0`: 全速 (No Throttle) - `Level 1`: 降速 20% (Insert Idle) - `Level 2`: 降速 50% (Half Capacity) - `Level 3`: 暂停 (Suspend) ## 3.2 响应机制简化 - **调度器侧 (`ResourceCoordinator`)**: - 逻辑简化为**迟滞比较器 (Hysteresis Comparator)**。仅当温度传感器上报值持续超过阈值(如 85°C)时,下发节流指令;温度回落至安全线(如 75°C)以下时,解除节流。 - 不再处理毫秒级的 UI 交互请求。 - **模块侧 (`SignalProcessor`)**: - **移除** `PreemptiveStreamManager` 和双流切换逻辑。 - **新增** `ThrottleController`:在 `ExecutionEngine` 的主循环(每帧处理结束处)插入动态休眠逻辑。 - _实现逻辑_: `if (throttle_level > 0) std::this_thread::sleep_for(calc_delay(level));` - **收益**: 算法 Kernel 再次回归到“大块连续执行”的最佳性能模式,无需为了响应中断而被人为切碎。 ## 3.3 修正后的时序图 (`sequenceDiagram`) 代码段 ```bash sequenceDiagram participant Monitor as 监控模块 participant EventBus as 事件总线 participant Scheduler as 任务调度器 participant SignalProc as 信号处理模块 Note over Monitor,SignalProc: 热保护节流流程 (不再涉及UI) Monitor->>Monitor: 检测到 GPU 温度 > 90°C Monitor->>+EventBus: 1. 发布 SystemOverloadEvent(THERMAL, CRITICAL) EventBus->>+Scheduler: 2. 路由告警 Scheduler->>Scheduler: 3. 决策: 必须降频保护 Scheduler->>+EventBus: 4. 广播 SetComputeThrottleEvent(Level=2) EventBus->>+SignalProc: 5. 路由指令 SignalProc->>SignalProc: 6. 更新内部节流状态 loop 每一帧处理循环 SignalProc->>SignalProc: 执行完整计算 (不切分) SignalProc->>SignalProc: 主动休眠 10ms (响应节流) end ``` --- ## 4. 对关联文档的连带影响 (Impact Analysis) 1. **对 `02_信号处理模块设计.md` 的影响**: - **删除** 4.3 节“抢占式 GPU 资源协调”。 - **删除** 4.3.3 节 `ISegmentableTask` 接口定义。算法策略不再需要实现 `segmentTask()` 方法,简化了 FFT/CFAR 等算法的封装难度。 - **简化** `GpuResourceManager`,移除多优先级流池。 2. **对 `05_任务调度器设计.md` 的影响**: - `ResourceCoordinator` 的职责缩减为仅负责系统健康相关的宏观调控,不再介入微观的任务调度。 3. **对 `99_模块集成策略.md` 的影响**: - 在集成测试阶段,移除针对“UI 拖拽卡顿”的压力测试用例,改为关注“长时间满载运行下的散热稳定性”。 --- 结论: 通过此补丁,我们移除了系统中最大的一个不确定性来源(异步抢占),使得信号处理流水线变得更加确定性和纯粹。这是对“奥卡姆剃刀原则”的一次成功实践——如无必要,勿增实体。