在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4533|回复: 10

cache

[复制链接]
发表于 2016-4-7 16:31:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
全相连与组相连有什么区别?组相连书上讲的太少,不太明白,有推荐的书或链接吗?求助高手
 楼主| 发表于 2016-4-7 16:32:03 | 显示全部楼层
什么时候用全相连好,什么时候用组相连好
发表于 2016-4-8 11:21:48 | 显示全部楼层
full associative, 主存可以任意映射到cache的任何一个存储单元;
N-way set associative, 主存可以每一组固定的一个单元。
cache怎么设计,主要是考虑miss rate, access time和功耗的折中。
 楼主| 发表于 2016-7-25 22:33:24 | 显示全部楼层
如果本次读操作刚好命中,但被替换的cache块有脏数据,那么cache可以先读再写回脏数据吗?这样可以早点返回读数据给请求。
发表于 2016-7-25 23:42:40 | 显示全部楼层
回复 4# 董小三


   在单核系统中可以这样优化,但是在多核系统中不可以,原因是:当一个核心的data cache脏块被替换时,很可能是另一个核心想要写这个脏块的同一个数据,所以这个块被替换出来了。推荐《计算机组成与设计:硬件与软件接口》
发表于 2016-7-26 10:13:49 | 显示全部楼层




   你确定明白自己问的问题?
既然说的是dirty data, 那你应该说的是data cache,
data cache如果是dirty, 为什么read hit后需要回写?
data cache的write一般就write-back, write-through两种,
对于write-through, 数据写到cache也会同时写的level2, 或者memory, 此问题不存在;
对于write-back, 数据写的cache, 做dirty标记。数据仅在cache line被替换时才回写。
如果是read hit, 不会发生回写。 无论是单核还是存在共享data的多核, 都不会发生。

对于多核, 如果存在data share, 就有cache coherence,
cache一致算法目录流行的是directory-based和snooping,原理基本一致。
如果你是一个共享数据的write master, 那情况和单核是一样的。 一致性有coherence控制器
维护,用于更新所以数据副本。
如果你仅仅是维护一个数据的副本, 当数据被master更新后,coherence控制器会标记这个副本为invalid.
这时候dirty标记是无效的。

如果你问的是cache miss, 问题才是成立的。因为此时才可能有cache line被回写。
这种情况下, 你说的方法也是可以的。 没有必要等回写后才把读的数据给内核。
数据既然是可以被cache的, 那就说嘛没有I/O问题,可以回写和读并行。
只是你需要做一个单独的临时的cache line, 当做一个buffer用,以备更新cache.

================================================
对于full associative和N-way set associative, 其实很好理解
搞清楚way/set的含义就清楚了。
full associative, 就是full-way full-set的意思,
way可以理解为通道,这个通道是用高位地址作为tag索引。
set可以理解为a set of cache lines。就是一组cache line的集合。对应一个way.
full-way, full-set就是一个cache line对于一个way。

full associative用的不多, 特别是对于cache比较大的,如果要做到高速,面积和功耗会比较大,
如果内核的cache较小, 可以考虑用这个结构。
 楼主| 发表于 2016-8-22 22:05:42 | 显示全部楼层
回复 6# mipsgreen


    受教了,非常感谢!
发表于 2016-11-1 15:06:24 | 显示全部楼层
回复 6# mipsgreen

经常在一些Cache的讲义里面看到Entry这个概念,没有理解的清楚,是指1 Cache line * 1 way吗?

我知道的一些Entry比较小的Cache,比如用作ERAT的,一般采用Full associative 的方式来做。
发表于 2016-11-7 11:23:43 | 显示全部楼层
今天在另一份资料里面看到,Entry的概念就是1 set里的way. 如果1set里面有8way (entry), 128 set的total  entry将是128 * 8 =1024 Entries.
发表于 2020-7-15 15:39:57 | 显示全部楼层
非常好 谢谢分享 mark
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-11 19:00 , Processed in 0.026297 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表