我有一个MIPS 64位架构的缓存,每个块2路4KB和16个字的行(每个块)。 我必须确定:
[TAG |指数|偏移]
每个字段的位大小
整个内存由多少位组成?
我不知道我所做的事情是否正确,因为我没有结果,因为我们正在使用64位MIPS而不是32我认为一个单词将由8个字节组成4。
我通过4KB / (16 words * 8 byte)
= 32
然后我完成了32 / 2-way
= 16
- > 4位 INDEX
然后我得到字和字节偏移如下:
16个字 - > 4位字偏移
8字节 - > 3位字节偏移
最后,我将TAG计算为64 - 4(index) - 4(word offset) - 3 (byte offset)
= 53 bit
并且总位数将是53 tag + 64 + 1 validate
= 118
,乘以块数(32)将得到3776位。
我不能完全确定结果,有人可以帮我这个吗?
感谢。
答案 0 :(得分:0)
部分问题不是很明确,我会尽力做出最好的猜测。
假设:高速缓存大小为4KB,字为64位,内存为字节寻址。
信息:缓存行宽度为16个字,它是一个双向设置关联缓存。
WebView
有点难以回答第二个问题,因为缓存通常会为每个缓存行提供额外的位,如有效位等。为简单起见,我们假设此缓存每个缓存行只有一个TAG。这给了我们52位* 16块* 2行的块= 1664位= 208字节。
因此整个缓存大小为
CREATE TABLE customer_trades (
id INT IDENTITY(1,1),
customer_id INT,
trade_date DATETIME,
PRIMARY KEY (id),
INDEX ix_user_trades (customer_id, trade_date)
)
INSERT INTO
customer_trades (
customer_id,
trade_date
)
VALUES
(1, '2013-05-01 00:00:00'),
(2, '2013-05-01 10:00:00'),
(1, '2013-05-02 00:00:00'),
(1, '2013-05-05 00:00:00'),
(2, '2013-05-06 12:00:00')
;
;WITH CTE as(
select customer_id, trade_date, datediff(hour,trade_date,ISNULL(LEAD(trade_date,1) over (partition by customer_id order by trade_date),GETDATE())) Trade_diff
from customer_trades
)
, CTE2 as
(SELECT customer_id, trade_diff, LAST_VALUE(trade_diff) OVER(Partition by customer_id order by trade_date) Curr_Trade from CTE)
SELECT Customer_id, AVG(trade_diff) AV, Max(Curr_Trade) Curr_Trade
FROM CTE2
GROUP BY customer_id