-
Notifications
You must be signed in to change notification settings - Fork 0
Profiling Report
Profiling LTE basebands reveals the classic tradeoff between Latency and Throughput.
In a synchronous, independent-call benchmark (docs/lte_mmse_budget_report_2026-07-01.md):
-
CPU AVX2: ~1916
$\mu s$ -
GPU CUDA: ~2262
$\mu s$
Why did the GPU lose here?
- PCIe Tax: Over 70% of the GPU time is spent on Host-to-Device (H2D) and Device-to-Host (D2H) memory transfers.
-
Launch Overhead: Synchronous kernel launches accumulate
$5-15 \mu s$ delays per call.
To unleash the GPU, MMSE_CPP implements StagingBuffers in src/mmse_equalizer_gpu.cpp.
We use a 3-stage Ring Buffer with Pinned Memory (cudaHostAlloc) and CUDA Streams.
This allows us to overlap:
- Stream 0: Kernel execution for Subframe
$N$ - Stream 1: H2D transfer for Subframe
$N+1$ - Stream 2: D2H transfer for Subframe
$N-1$
By completely hiding the PCIe transfer latency, the GPU path easily scales to Massive MIMO and multi-sector configurations where the CPU would choke.
🗺️ 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!