Files
Inbox/设计补丁/ECN_关于UI渲染与CUDA计算之间的资源竞争.md
2025-12-11 07:24:36 +08:00

116 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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: <b>主动休眠 10ms</b> (响应节流)
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 拖拽卡顿的压力测试用例改为关注长时间满载运行下的散热稳定性”。
---
结论:
通过此补丁我们移除了系统中最大的一个不确定性来源异步抢占使得信号处理流水线变得更加确定性和纯粹这是对奥卡姆剃刀原则的一次成功实践——如无必要勿增实体