-
Notifications
You must be signed in to change notification settings - Fork 0
Heterogeneous Dispatch
在 MMSE_CPP 的底层架构设计中,我们面临着 4G/5G 物理层基带处理的一个核心技术矛盾:极低延迟 (Ultra-Low Latency) 与 海量吞吐 (Massive Throughput) 之间的取舍。
为了在不同的通信场景下都能达到极致的性能表现,本引擎没有采用“一刀切”的单处理器方案,而是设计了一套智能的异构调度机制 (Heterogeneous Dispatcher),在 CPU (AVX2/AVX-512) 与 GPU (CUDA) 之间动态分配负载。
基带信号处理并非总是“扔进 GPU 就会更快”。调度器必须深刻理解两种处理器的底层行为:
- 优势:真正的零拷贝 (Zero-Copy)。射频前端送来的 IQ 网格数据直接驻留在主存 (DRAM) 与 L3 Cache 中。CPU 发起一次 AVX 指令调用的延迟在纳秒级别 (ns)。它极其擅长处理伴随复杂控制流 (Control Flow) 的细碎任务。
- 劣势:在面对全带宽 (如 100 PRBs)、高阶 MIMO 或多小区并发时,有限的 CPU 核心数和内存带宽会被迅速耗尽。
- 适用场景:控制面解析 (PCFICH/PDCCH)、VoLTE 等小包数据调度、URLLC (超可靠低延迟) 业务。
- 优势:拥有数千个流处理器和恐怖的显存带宽 (VRAM)。对于庞大且规则的矩阵运算,它能提供降维打击般的吞吐量。
-
劣势:PCIe 搬运税 (PCIe Tax) 与启动开销。每次调度都需要经历
H2D 拷贝 -> Kernel 启动 -> D2H 拷贝。如果计算量不够大,总耗时反而会比 CPU 更长。 - 适用场景:数据面解析 (PDSCH)、Massive MIMO、多扇区 (Multi-Sector) 批处理并发。
MMSE_CPP 在引擎入口处实现了一个轻量级的路由层。当 ARM/主控线程下发一个调度指令(如 ExtractDescriptor)时,调度器会基于以下两个核心策略进行派发:
控制信道和数据信道在物理层流水线中的优先级不同:
- 控制信道 (PCFICH / PDCCH) 具有极其严苛的时序依赖。必须立刻解出 PDCCH 的 DCI,才能知道后续 PDSCH 的位置。因此,所有控制面的信道估计与均衡强制绑定到 CPU (AVX2) 极速路径,省去一切 PCIe 开销,确保盲检任务在几微秒内点火。
- 数据信道 (PDSCH) 的 LLR 生成相对宽容,可以容忍流水线深度的增加,因此优先考虑投递给 GPU。
对于 PDSCH 数据信道,调度器会动态评估当前描述符 (Descriptor) 中的负载量。
系统预设了一个经验性的 GPU_PRB_THRESHOLD(可通过基准测试工具校准):
- 当分配的资源块
num_allocated_prbs < THRESHOLD(例如只有寥寥几个 PRB 的微信心跳包)时,调度器会将其拦截并转交给 CPU 处理,以避免“杀鸡用牛刀”导致的 PCIe 延迟倒挂。 - 当
num_allocated_prbs >= THRESHOLD(如观看 4K 视频的大文件下载)时,调度器将其打包送入 CUDA 异步流水线。
为了让异构调度对上层业务透明,我们在底层工程中采用了以下设计模式:
异构调度的首要前提是内存必须对 CPU 和 GPU 都友好。
引擎的资源网格 (Resource Grid) 统一使用 cudaHostAlloc 申请的锁页内存 (Pinned Memory / Page-locked)。
- 当任务分配给 CPU 时,CPU 直接在主存上以最高速度进行 AVX 寻址。
- 当任务分配给 GPU 时,GPU 的 DMA 控制器可以直接从物理内存中拉取数据,无需经过操作系统的 Pageable 内存中转,带宽翻倍。
无论任务走向何方,调度器的 API 都是异步的:
// 异构调度器的概念代码
void BasebandEngine::dispatch_pdsch_task(const PdschExtractDescriptor& desc, ResourceGrid* grid) {
if (desc.num_allocated_prbs < GPU_PRB_THRESHOLD) {
// 投递给 CPU 线程池 (AVX2 路径)
cpu_thread_pool.submit([=]() {
avx2_equalizer.run(desc, grid);
});
} else {
// 投递给 CUDA 异步流流水线
cuda_pipeline.submit_async(desc, grid);
}
}🗺️ Wiki Navigation: 🏠 Home (主页) | ⬆️ Back to Top (回到顶部)
🔗 Project Links: 💻 GitHub Repository | 🐛 Report an Issue | 🛡️ Security Policy
MMSE_CPP is a high-performance LTE PHY baseband engine optimized for AVX2 and CUDA. > Released under the open-source license. Contributions are welcome!