随机内存访问场景下DDR4-2933性能瓶颈成因问询
随机单字节访问内存性能远低于标称带宽的核心原因
你的实测结果完全符合随机内存访问的特性,DDR4的2933 MT/s是连续块访问的峰值带宽,而随机单字节访问受限于以下几个关键瓶颈:
内存事务的固有开销与burst传输浪费
DDR4采用burst传输机制,每次内存请求都会触发一个8-beat的burst(对应64字节数据),即使你只需要1个字节。同时,每个随机请求都要完整经历RAS寻址、CAS寻址的延迟周期,这些开销远大于单字节数据传输的时间。单字节请求的有效带宽自然会被压缩到标称值的几十分之一。缓存行的低效利用
CPU从内存加载数据时,是以64字节为单位的缓存行加载。你的场景只访问每个缓存行中的1个字节,剩余63字节完全无用,有效数据利用率仅1/64,这直接拉低了实际有效带宽。单线程内存请求的并行度不足
虽然DDR4支持多bank并发访问,但单线程的乱序执行窗口有限,无法同时发起足够多的内存请求来隐藏访问延迟。内存控制器无法充分利用DDR的并行特性,只能串行处理大部分请求,进一步限制了吞吐量。内存控制器的请求队列深度限制
Intel 10代酷睿的内存控制器单通道下的未完成请求队列深度有限,随机访问时,每个请求都需要等待几十纳秒的延迟才能完成,队列很快被占满,后续请求只能排队等待,无法形成流水线式的连续传输。
结合你用perf得到的95%缓存缺失、PRNG仅7.1%开销的结果,完全可以确认瓶颈就是随机内存访问的上述固有特性,而非代码或编译优化问题。
内容的提问来源于stack exchange,提问作者Moss Richardson
相关产品推荐
相关产品推荐

