@aozima 在 D1-H内存访问速度差异测试 中说:
抱歉,我理解成写入操作了。
只读取的话,清cache后确实真实地从DRAM中读取。
但此时CPU实际可能会从DRAM读取64字节的数据吧,因为cache line是64字节。
是的 但我随机取的地址,很小概率在同一个cache line里。
映射到非cache大佬能细讲一下吗?我了解到这个好像跟PMA有关,是在芯片设计时就固化的,不知道D1上是否可以配置,划分出一块uncached的内存呢
@aozima 在 D1-H内存访问速度差异测试 中说:
抱歉,我理解成写入操作了。
只读取的话,清cache后确实真实地从DRAM中读取。
但此时CPU实际可能会从DRAM读取64字节的数据吧,因为cache line是64字节。
是的 但我随机取的地址,很小概率在同一个cache line里。
映射到非cache大佬能细讲一下吗?我了解到这个好像跟PMA有关,是在芯片设计时就固化的,不知道D1上是否可以配置,划分出一块uncached的内存呢
@aozima 在 D1-H内存访问速度差异测试 中说:
虽然你访问完就刷cache,但实际CPU操作的还是cache中的,结果有参考意义,但不准确。除非你裸机映射成非cache的,但这样没什么实际意义。
实际使用中,数据结构和地址多留意尽量对齐,大数据量尽量cache line对齐就行了。
为什么说Cache刷完后还是操作的Cache中的呢?300+个周期不可能还是操作的Cache吧
测试现象:D1-H内存访问速度与特定的地址位相关
测试流程:连续访问a、b两个地址(访问之后清cache,保证访问到DRAM),统计平均的访问时间
测试结果一共有如下几种情况:
若两个地址4,5位都为00 且 两个地址6,7,8,9,10,11位不同,内存访问时间为304个周期
若两个地址4,5位都为00 且 两个地址6,7,8,9,10,11位相同,内存访问时间为305~307个周期
若只有一个地址4,5位为00 且 两个地址6,7,8,9,10,11位不同,内存访问时间为310个周期
若只有一个地址4,5位为00 且 两个地址6,7,8,9,10,11位相同,内存访问时间为314个周期
若两个地址4,5位都不为00 且 两个地址6,7,8,9,10,11位不同,内存访问时间为317个周期
若两个地址4,5位都不为00 且 两个地址6,7,8,9,10,11位相同,内存访问时间为321个周期
总结:
地址位4,5位为0的情况下,内存访问速度会稍快
若两个地址的6,7,8,9,10,11地址位相同会导致内存访问速度变慢
问题:
造成以上现象的原因是什么呢?
6,7,8,9,10,11地址位相同造成内存访问速度变慢可能是row conflict现象吗?但通常来说地址低位不太可能是bank位
CPU超频之后,内存测试的周期数没有变化,D1的内存访问时间有没有优化空间?
D1-H的物理地址到DRAM row、bank、column的映射方式有大佬了解吗?可否告知一下
新人初次发帖,希望有大佬能帮助解答一下