Lmbench3中MCP与FCP内存拷贝的差异及带宽测试疑问
Lmbench3中MCP与FCP例程的行为差异及核心推断
核心行为差异
- 数据处理粒度
- MCP使用
ldr x2, [x0]和str x2, [x1]指令:x2是ARM 64位通用寄存器,每次循环仅处理8字节数据。配合每次32字节的指针递增,意味着它只访问每个32字节块的前8字节,剩余24字节被跳过。 - FCP使用
ldp q0, q1, [x0]和stp q0, q1, [x1]指令:q0/q1是128位NEON向量寄存器,ldp一次加载32字节(2×128位),stp一次存储等量数据。同样以32字节步长递增指针,每次循环完整处理32字节数据块,无数据跳过。
- MCP使用
- 内存访问模式
- MCP属于稀疏访问:每32字节仅读写8字节,是非连续内存访问模式,会触发大量缓存行失效(比如对于64字节缓存行,每次访问只用到1/8的缓存行内容)。
- FCP属于连续访问:每次读写完整32字节块,指针连续推进,能最大化缓存命中率和内存总线利用率。
- 指令吞吐量
- MCP每处理8字节需要2条指令,单位数据量的指令开销更高。
- FCP用同样2条指令处理32字节,指令效率是MCP的4倍,能更充分利用CPU指令流水线。
可推断的关键信息
- 测试目标不同
- MCP用于测试稀疏内存访问场景下的带宽,模拟碎片化内存、多进程共享内存等真实场景的性能表现。
- FCP用于测试连续内存访问的峰值带宽,对应内存系统的最优性能场景(比如大数组拷贝、连续IO操作)。
- 硬件通路测试区分
- MCP使用通用寄存器,避开NEON单元,测试的是CPU通用内存通路的性能。
- FCP利用NEON SIMD寄存器,借助SIMD单元的宽幅内存访问能力,测试向量通路的内存带宽。
- Lmbench3的测试设计逻辑
- 这两个例程是为了覆盖不同内存访问模式的性能维度,帮助用户了解系统在最优(连续)和次优(稀疏)场景下的内存能力差异。
带宽测试核心区别对比
| 维度 | MCP | FCP |
|---|---|---|
| 访问模式 | 稀疏非连续 | 连续块访问 |
| 单次循环处理数据量 | 8字节 | 32字节 |
| 测试带宽类型 | 稀疏访问带宽(真实场景下限) | 连续访问峰值带宽(理论上限) |
| 依赖硬件单元 | CPU通用寄存器通路 | NEON SIMD单元 |
| 缓存利用率 | 低(频繁缓存失效) | 高(缓存行高效利用) |
内容的提问来源于stack exchange,提问作者Hari Krishna
相关产品推荐
相关产品推荐

