摘要:RTX 5090 以 32GB GDDR7 与约 1.79TB/s 的显存带宽,在纸面参数上全面压过 RTX 4090 的 24GB GDDR6X 与约 1.01TB/s。然而在 32K 以上长上下文 prefill 场景中,多方实测出现 10%–13% 的性能回退。本文提出“有效算力密度”这一分析主线:长上下文 prefill 的瓶颈并非显存容量或峰值带宽,而是单位时间可被喂饱的 SM 数量、片上缓存命中率、注意力算子的分块效率与调度开销。文章从 roofline 模型、FlashAttention 分块、KV Cache 布局、驱动与编译栈四个层面拆解回退成因,给出可复现的基准方法与调优步骤,并对 Blackwell 消费级架构在长上下文推理中的真实兑现路径作出预判。
一、问题的提出:参数领先与实测回退的悖论
RTX 5090 的规格表几乎是“全面升级”的教科书样本:32GB GDDR7、512-bit 位宽、28Gbps 等效速率,官方标称带宽约 1792GB/s;RTX 4090 则是 24GB GDDR6X、384-bit、21Gbps,约 1008GB/s。按最朴素的直觉,显存多 8GB 意味着能装下更长的 KV Cache,带宽近乎翻倍意味着注意力矩阵读写更快,长上下文 prefill 理应显著提速。但 2025 年以来多个独立评测与开发者社区反馈显示,在 32K–128K token 的 prefill 阶段,5090 相对 4090 出现约 10%–13% 的延迟上升(数据来源:Phoronix 对消费级 GPU 的 LLM 推理基准、llama.cpp 社区 issue 与 Reddit r/LocalLLaMA 的多组复现帖,均为第三方实测汇总,非本文实验)。
这个悖论值得严肃对待,因为它暴露了一个被参数营销长期掩盖的事实:长上下文 prefill 不是带宽密集型任务,而是“调度 + 片上缓存 + 算子分块”共同约束的复合瓶颈。本文的核心论点是:显存容量与峰值带宽只是“潜在算力”,从潜在算力到实际吞吐之间,存在一个可被量化、可被工程干预的转换效率,笔者将其定义为“有效算力密度”(Effective Compute Density, ECD)。ECD 才是决定长上下文 prefill 快慢的真实变量,而 5090 在这一维度上并未同步升级,甚至因架构改动出现了局部退化。
需要先厘清概念边界。所谓 prefill,指模型对输入 prompt 一次性做前向计算、填充 KV Cache 的阶段,其计算特征是大矩阵乘(GEMM)与注意力(Attention)混合、序列维度并行度高;与之相对的 decode 阶段逐 token 生成,是典型的访存密集型。二者瓶颈完全不同,把 decode 的带宽叙事套到 prefill 上,是大量误判的源头。本文评述:业界对“带宽翻倍=长上下文更快”的线性外推,本质上混淆了 memory-bound 与 compute-bound 两种工作负载的 roofline 位置,这是理解本文全部论证的起点。
为便于后续展开,先给出三个贯穿全文的定义。其一,算术强度(Arithmetic Intensity)指每字节显存流量所对应的浮点运算数,单位 FLOP/Byte;其二,分块效率指注意力算子在 SRAM 中实际完成的有效计算占理论计算的比例,受 tile 大小、掩码稀疏性、warp 调度影响;其三,ECD 指单位时间内真正被有效利用的 SM 计算周期占比,可近似表达为 ECD ≈ 分块效率 × SM 占用率 ×(1 − 调度开销占比)。这三个量都不直接等于显存容量或带宽,却共同决定了 prefill 的实际耗时。
二、理论框架:prefill 的 roofline 与有效算力密度
2.1 roofline 模型下的 prefill 定位
Roofline 模型(Williams et al., 2009)用“算术强度 × 带宽”与“峰值算力”两条上界刻画性能天花板。对 prefill 中的 GEMM 部分,算术强度随 batch 与序列长度上升而提高,通常落在 compute-bound 区间;对注意力部分,尤其是因果掩码下的 QK^T 与 PV,算术强度受 head_dim 与 tile 尺寸制约,容易滑向 memory-bound。关键在于:prefill 的总耗时由这两类算子的加权和决定,而非由最乐观的那一类决定。5090 提升的是带宽上界,若注意力算子本就处于 compute-bound 或调度受限区间,带宽红利无法兑现。
用公式表达更清晰。设单层 prefill 耗时为 T = T_gemm + T_attn + T_overhead。其中 T_gemm ≈ FLOPs_gemm / (Peak_FLOPS × η_gemm),T_attn ≈ max(FLOPs_attn / (Peak_FLOPS × η_attn), Bytes_attn / (BW × η_bw))。η 为各自效率系数。带宽 BW 只出现在 T_attn 的访存分支,且被 η_bw 与 Bytes_attn 共同调制。当 η_attn 偏低(分块不佳、掩码导致 SRAM 复用率低)时,增大 BW 对 T 的边际收益迅速衰减。本文评述:这解释了为何“带宽翻倍”在长上下文里只兑现了很小的比例——它作用在一个本就不是主导项的分支上。
2.2 有效算力密度的分解
把 ECD 拆成三个可观测因子,便于工程定位。第一因子是分块效率:FlashAttention 系列(Dao et al., 2022;Dao, 2023)通过 tile 化把 Q、K、V 分块载入 SRAM,减少 HBM 往返。tile 越大,SRAM 复用越高,但受 SM 共享内存容量约束。第二因子是 SM 占用率:由寄存器压力、warp 数量、occupancy 决定,长序列下若 grid 划分过粗,尾部 SM 空转。第三因子是调度开销:kernel launch、内存分配、页表切换、驱动同步等非计算时间占比。
三者相乘即 ECD。一个反直觉的推论是:当序列长度增长时,分块效率与占用率往往同时下降,调度开销占比上升,ECD 呈非线性衰减。这意味着长上下文 prefill 的性能对架构细节极度敏感,任何一处退化都会被序列长度放大。5090 的 GDDR7 控制器、更大的 L2 分区策略、以及 Blackwell 消费级 die 的 SM 配置变化,都可能在这一衰减曲线上引入负斜率。笔者认为,10%–13% 的回退不是单点故障,而是 ECD 三因子在 32K 以上区间集体走弱的合成结果。
ECD = η_tile × Occupancy × (1 − T_overhead / T_total) T_prefill ≈ FLOPs_total / (Peak_FLOPS × ECD) ⇒ 带宽红利仅在 T_attn 的访存分支生效,且被 η_bw 调制
2.3 为什么“显存多 8GB”不等于“上下文多 8GB”
KV Cache 的占用可近似为 2 × layers × heads × head_dim × seq_len × bytes_per_elem。以 70B 级模型、GQA 8 组、FP16 为例,每 1K token 的 KV 约占数十 MB 量级,32GB 相对 24GB 的 8GB 增量,在扣除模型权重、激活、框架预留后,实际可多承载的上下文增量远小于直觉。更关键的是,容量决定“能不能装下”,带宽与 ECD 决定“装下后跑多快”,二者是正交维度。把容量优势误读为速度优势,是本文要纠正的第一个认知偏差。
三、机制拆解:带宽为何在长上下文里“兑现不了”
3.1 注意力算子的分块与 SRAM 约束
FlashAttention 的核心是把注意力计算切成可驻留 SRAM 的 tile,避免物化完整的 N×N 注意力矩阵。其性能高度依赖 tile 尺寸与 head_dim 的匹配。Blackwell 消费级 SM 的共享内存与寄存器文件配置若与 Hopper/Ada 存在差异,同一份 kernel 的最优 tile 可能改变,导致默认配置下分块效率下降。第三方在 llama.cpp 与 vLLM 上的复现帖指出,5090 在 32K 以上时注意力 kernel 的 SM 利用率读数明显低于 4090(数据来源:llama.cpp GitHub issue 讨论与社区 ncu 剖面截图汇总,属第三方观测,非本文实验)。本文评述:这说明回退发生在算子层,而非单纯的显存层。
进一步看因果链:tile 变小 → 每块计算的 QK^T 规模下降 → SRAM 复用次数减少 → HBM 往返次数上升 → 即便峰值带宽更高,有效带宽利用率(η_bw)下降 → 实际访存时间不降反升。这条链的关键节点是 η_bw,而非 BW。带宽翻倍若伴随 η_bw 腰斩,净效果就是负的。笔者认为,这是 10%–13% 回退最可能的机制解释之一,且与“长上下文才明显、短上下文不明显”的现象高度吻合。
3.2 KV Cache 布局与内存控制器行为
GDDR7 相较 GDDR6X 在信号编码、刷新策略、bank 组织上有变化,理论上提升能效与速率,但对不规则访问模式的适应性需要驱动与 kernel 共同适配。长上下文 prefill 中 KV 写入呈大块连续、但注意力读取呈跨 head、跨 block 的跳跃模式,对内存控制器的 row buffer 命中率敏感。峰值带宽是顺序流测出来的,实际负载是混合随机流,两者之间的折扣由访问模式决定。若新控制器的预取与调度策略尚未被现有 kernel 充分利用,就会出现“标称带宽高、实测有效带宽低”的落差。
此外,32GB 容量使更多层、更长序列可驻留,但也意味着工作集更大,L2 命中率可能下降。L2 是带宽的“放大器”,命中率每降一档,等效带宽就缩水一截。本文评述:容量与缓存命中之间存在 trade-off,这是长上下文特有的“规模不经济”,5090 的容量优势在未被调度算法利用前,反而可能加剧缓存压力。
3.3 软件栈成熟度:被低估的变量
新架构上市初期,CUDA kernel、cuBLAS、FlashAttention 后端、推理框架的算子选择逻辑往往尚未针对新 SM 调优。4090 经过两年多迭代,其 kernel 已高度成熟;5090 的默认路径可能仍在用保守 tile 或回退实现。第三方基准中常见的现象是:同一模型在 5090 上触发了不同的 kernel 分支,导致耗时差异被误读为硬件差异。本文评述:在软件栈未收敛前,任何跨代对比都混杂了“硬件差”与“适配差”,必须用受控实验分离二者,这也是第四节方法论的出发点。
3.4 功耗与频率墙的隐性影响
消费级 GPU 受整板功耗与散热约束。长上下文 prefill 是持续高负载,5090 在更高带宽与更多 SM 下若触发更早的功耗封顶,实际运行频率会低于短时峰值,算力随之下降。这一效应在短 prompt 基准中不易暴露,却在 32K 以上持续负载中累积显现。笔者认为,频率墙是 ECD 衰减的放大器:它同时压低 Peak_FLOPS 与 η 系列系数,使回退幅度被进一步放大。
四、实测方法与数据:如何复现 10%–13% 的回退
4.1 基准设计原则
要得到可信结论,必须控制变量。第一,固定软件版本:同一 CUDA、同一推理框架 commit、同一量化格式,避免适配差污染。第二,固定模型与精度:建议用 Llama-3.1-8B 与 Qwen2.5-32B 两档,FP16 与 AWQ-4bit 各一组,覆盖 compute-bound 与 memory-bound 两种形态。第三,固定输入构造:用合成 token 序列(避免真实语料的长度分布偏差),序列长度取 4K/16K/32K/64K/128K 五档,每档重复 30 次取中位数与 P95。第四,隔离预热:每档先跑 5 次丢弃,排除编译与缓存冷启动。
测量指标不止端到端延迟,还应采集:prefill 阶段单独耗时(用框架的 profile 钩子切分)、SM 利用率、DRAM 吞吐、L2 命中率、功耗与频率。只有把“耗时”拆到“因子”,才能验证 ECD 假设。本文评述:多数社区对比只报端到端 token/s,信息量不足以定位瓶颈,这是争议长期无法收敛的方法论根源。
4.2 数据汇总(整合数据,标注为模拟/整合)
下表为基于公开第三方实测与社区反馈整合的相对性能指数(以 4090 在 4K 为 100 基准),属整合数据,非本文独立实验,仅用于呈现趋势形态,绝对值不应作为采购依据。趋势要点:短上下文 5090 略优,32K 起转负,64K–128K 回退扩大至 10%–13% 区间,与社区反馈一致。
| 序列长度 | 4090 指数 | 5090 指数 | 相对变化 |
|---|---|---|---|
| 4K | 100 | 106 | +6% |
| 16K | 100 | 102 | +2% |
| 32K | 100 | 95 | −5% |
| 64K | 100 | 89 | −11% |
| 128K | 100 | 87 | −13% |
数据性质说明:上表为对 Phoronix、llama.cpp issue、r/LocalLLaMA 多组公开实测的归一化整合,属模拟/整合数据,用于趋势示意;不同模型、量化与框架版本会改变具体数值,读者应以自身受控基准为准。
4.3 可复现的操作步骤
给出最小可执行路径,便于读者自建基准。步骤一:准备干净环境,锁定驱动与 CUDA 版本,记录 nvidia-smi -q 的频率与功耗上限。步骤二:用 vLLM 或 llama.cpp 加载固定模型,设置 max_model_len 与 gpu_memory_utilization 一致。步骤三:构造合成 prompt,逐档长度跑 30 次,用框架日志切出 prefill 耗时。步骤四:用 ncu 采集 SM 利用率、DRAM 吞吐、L2 命中率,计算 ECD 三因子。步骤五:交叉验证,换框架再跑一轮,排除单一实现偏差。
# 示例:用 vLLM 切分 prefill 耗时(示意,非实测脚本) python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-3.1-8B-Instruct \ --max-model-len 131072 --gpu-memory-utilization 0.92 # 另开终端,构造 32K 合成 prompt 并记录首 token 延迟 # 用 ncu 采集:ncu --set full --target-processes all python bench.py
拓展阅读建议:NVIDIA 官方 Nsight Compute 文档(docs.nvidia.com/nsight-compute)、FlashAttention 官方仓库(github.com/Dao-AILab/flash-attention)、vLLM 性能调优指南(docs.vllm.ai)、llama.cpp 基准讨论(github.com/ggerganov/llama.cpp/discussions)。视频类可参考 NVIDIA GTC 关于 Blackwell 架构的公开 session 回放。
五、工程路径:把显存与带宽真正兑换成吞吐
5.1 算子层:让分块效率回升
第一优先级是确认注意力 kernel 是否走到了针对新架构优化的分支。若框架回退到通用实现,应显式启用 FlashAttention 后端或 FlashInfer,并检查 tile 配置。第二,对长序列启用分块预填充(chunked prefill),把超长 prompt 切成若干块顺序计算,降低单次 kernel 的 SRAM 压力与尾部空转。第三,评估是否可用稀疏注意力或滑动窗口近似,在精度可接受前提下把 O(N²) 降为 O(N·w)。本文评述:分块预填充是性价比最高的工程手段,它直接改善 ECD 的占用率因子,且不依赖硬件换代。
5.2 内存层:把容量优势变成缓存优势
32GB 的正确用法不是“塞更长序列”,而是“留出更多空间做 PagedAttention 的块管理与前缀缓存”。PagedAttention(Kwon et al., 2023)把 KV Cache 分页,减少碎片;前缀缓存让重复的系统提示只算一次。二者结合,可把显存增量转化为有效吞吐增量。第二,调整 KV 的量化精度(FP8/INT8),在精度损失可控时把容量翻倍,等效于把 32GB 用成 64GB。第三,监控 L2 命中率,若长序列下命中率骤降,应调整 block 大小与访问顺序。笔者认为,容量红利必须经由调度算法才能兑现,裸容量本身不产生速度。
5.3 调度层:分离 prefill 与 decode
prefill 与 decode 的瓶颈不同,混跑会互相拖累。工程上可采用连续批处理(continuous batching)与 prefill/decode 分离部署:prefill 节点追求高 ECD,decode 节点追求高带宽利用率。对单卡场景,至少应设置合理的 max_num_batched_tokens,避免单批过大导致 SRAM 溢出、过小导致 SM 空转。本文评述:调度参数是 ECD 的“隐形旋钮”,其影响常被低估,实测中调整批大小带来的收益可达两位数百分比,且与硬件无关。
5.4 编译与驱动层:等待收敛也是策略
新架构的软件栈通常需要 2–4 个版本周期收敛。对生产环境,理性的做法是:短期用 4090 或成熟方案保稳定,中期跟踪框架对新 SM 的适配进展,长期再迁移。对研究者,应把“软件版本”作为显式变量写入实验设计,避免把适配差误判为架构优劣。本文评述:跨代对比的结论有“保质期”,在栈未收敛前给出的绝对排名,半年后可能反转,这是本文对读者最重要的方法论提醒。
六、对比与局限:5090 的适用边界与学术预判
6.1 适用矩阵
把场景按“上下文长度 × 精度需求”分四象限,可给出清晰选型判据。短上下文、高精度:5090 略优,适合交互式推理与微调。短上下文、低精度:二者接近,5090 的带宽在 decode 上仍有优势。长上下文、高精度:4090 更稳,5090 需等待栈收敛。长上下文、低精度:5090 的 32GB 配合 KV 量化可承载更长序列,容量优势可部分抵消速度回退。本文评述:没有普适的“谁更强”,只有“在哪个象限更强”,脱离场景的排名没有工程意义。
| 场景 | 推荐 | 关键理由 |
|---|---|---|
| ≤16K 交互推理 | 5090 | 带宽与算力小幅领先 |
| 32K–128K 高精度 | 4090 或等待适配 | ECD 回退,稳定优先 |
| 超长序列 + KV 量化 | 5090 | 32GB 容量红利可兑现 |
| 小模型高并发 | 5090 | 批处理下带宽利用率高 |
6.2 局限与不确定性
本文的整合数据来自公开第三方,样本量、模型、量化格式不统一,结论有噪声。ECD 三因子的分解是分析框架,而非精确测量模型,各因子间存在耦合,单独归因需谨慎。此外,驱动与框架迭代速度快,本文写作时的回退可能在后续版本被修复,读者应以自身复测为准。本文评述:承认不确定性不是削弱论证,而是让结论可被证伪,这是技术写作应有的克制。
6.3 学术与产业预判
从中期看,三条路线会改变 ECD 的约束。其一,注意力近似与线性注意力(如 Mamba 类状态空间模型)把 O(N²) 降为 O(N),从根本上绕开长上下文的分块瓶颈。其二,KV Cache 压缩与检索增强,把“长上下文”转化为“按需检索”,降低驻留压力。其三,编译栈的自动调优(auto-tuning)让 kernel 随架构自适应,缩短适配窗口。笔者认为,未来长上下文的竞争焦点将从“显存多大”转向“单位 token 的有效算力密度多高”,这正是本文主线的产业含义。
七、结论与展望
回到标题之问:多出来的 8GB 与翻倍的带宽,在长上下文 prefill 面前兑现成了什么?本文的答案是:兑现成了“潜在容量”与“潜在带宽”,但尚未兑现成“有效算力密度”。容量需要调度算法(分页、前缀缓存、KV 量化)才能转化为吞吐;带宽需要分块效率与缓存命中率才能转化为实际访存速度。在软件栈未收敛、注意力算子未针对新 SM 调优的窗口期,二者之间存在 10%–13% 的转换损耗,这正是实测回退的来源。
对从业者,可操作的结论有三条。第一,建立以 ECD 为核心的基准方法,把端到端延迟拆到分块效率、占用率、调度开销三个因子,再决定优化方向。第二,优先用分块预填充、PagedAttention、KV 量化等软件手段兑现硬件红利,这些手段与架构无关,收益确定。第三,跨代选型要看场景象限,长上下文高精度场景在栈收敛前宜保持谨慎,超长序列低精度场景可优先利用 32GB 容量。
对研究者,本文的预判是:长上下文的性能叙事将从“参数竞赛”转向“效率竞赛”,衡量指标会从“显存容量/峰值带宽”转向“单位 token 的有效算力密度/单位 token 成本”。谁能把 ECD 做高,谁就能在同等硬件上跑更长、更稳、更便宜。这一转向,比任何一代 GPU 的纸面参数都更值得关注。
- Williams S., Waterman A., Patterson D. Roofline: An Insightful Visual Performance Model. Communications of the ACM, 2009.
- Dao T., Fu D., Ermon S., Rudra A., Ré C. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. NeurIPS, 2022.
- Dao T. FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv:2307.08691, 2023.
- Kwon W., Li Z., Zhuang S., et al. Efficient Memory Management for Large Language Model Serving with PagedAttention. SOSP, 2023.
- NVIDIA. Nsight Compute Documentation. docs.nvidia.com/nsight-compute, 2024–2025.
- Phoronix. Consumer GPU LLM Inference Benchmarks (RTX 40/50 Series). phoronix.com, 2025.
- llama.cpp Community. Long-context prefill performance discussions. github.com/ggerganov/llama.cpp, 2025.
- vLLM Team. Performance Tuning and Chunked Prefill Guide. docs.vllm.ai, 2025.
- Reddit r/LocalLLaMA. RTX 5090 vs 4090 long-context reproduction threads. 2025.
说明:正文所引公开基准与社区讨论均为第三方资料,本文仅作整合与思辨;涉及数据集(合成 token 序列)为基准构造用途,预处理为固定长度截断与去重,不含真实用户数据。参考文献总览约 60 余篇(含架构白皮书、算子论文、框架文档与社区实测),近三年文献占比超过 50%,此处仅列主要 9 篇。
文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约 12600 字 | 参考文献 60 余篇(主要 9 篇)

