cpu的两个问题
cpu在cache中取指或取数时,若未命中,就会去读内存。请问读内存时,是只读需要的数据呢,还是和读磁盘一样也要进行预读?另外,586以上的cpu,其cache是不是采用哈佛结构,有代码和数据两个cache。谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
cpu在cache中取指或取数时,若未命中,就会去读内存。请问读内存时,是只读需要的数据呢,还是和读磁盘一样也要进行预读?另外,586以上的cpu,其cache是不是采用哈佛结构,有代码和数据两个cache。谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
我记得cache的读取是按块读的,或者叫做cacheline吧。
ia32似乎是指令/数据cache分开的,不过不知道是不是叫做哈佛结构。
谢谢mingyanguo 兄。
[ 本帖最后由 gta 于 2007-1-26 10:07 编辑 ]
不客气。
这个大小我记不住,找找手册看看吧。
手头资料不方便。
AMD64 的 cache 是这样的:
Cache 的结构就像一个矩阵。
行为 set , 列为 way
一个 4 way 的 cache 组织中,一个 set 有 4 个 cache line 组成
每个 cache line 由 3 个部分组成: tag 域、data 域 和 other information 域
每个 cache line 为 64 bytes。
虚拟地址经过 MMU 处理后的物理地址,为分为三个部分。
index 域:得出 cache 的 set 值,如上图所求,从 index 得出 set 为 2
tag 域:物理地址的 tag 分别与 set 中的每个 way 的 cache line 的 tag 进行比较,直到匹配(hit)。在每个 way 进行搜索是通过一个 n:1 的乘法器得出每个 way 的地点。
offset 域:当 hit 时,通过 offset 域索引出 cache line 中 data 域的具体数据。
Intel 提供了4条 cache 预读指令:
prefetchnta、prefetcht0、prefetcht1 以及 prefetch2
AMD 增加了两条指令:
prefetch 和 prefetchw,这两条是 AMD 自已的 3D NOW 指令。
下面是示例代码:
c code:
复制代码
汇编码:
复制代码
代码中将数据装载进 cache 的 4 个 set
4 way 结构,每个 cache line 为 64 bytes, 4 * 64 byte 共 256 bytes。
[ 本帖最后由 mik 于 2007-1-27 12:11 编辑 ]