MIPS双向缓存

时间:2018-01-03 15:16:53

标签: mips computer-science cpu-architecture cpu-cache

我有一个MIPS 64位架构的缓存,每个块2路4KB和16个字的行(每个块)。 我必须确定:

  1. [TAG |指数|偏移]

    每个字段的位大小

  2. 整个内存由多少位组成?

  3. 我不知道我所做的事情是否正确,因为我没有结果,因为我们正在使用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位。

    我不能完全确定结果,有人可以帮我这个吗?

    感谢。

1 个答案:

答案 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