• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

计算机的主存地址空间是256 MB,按字节寻址。指令缓存和数据缓存分离,各有8条缓存线,每条缓存线大小为64 B,数据缓存直接映射。有两个功能相同的程序A和B,它们的伪代码如下:

图片.png

假设int类型的数据用32位补码表示,\(i,j,sum\)在程序编译时全部分配在寄存器中,数组A以行优先的方式存储,第一个地址为320(十进制数)。请回答以下问题,询问原因或给出计算过程。

(1)在不考虑\(缓存\)一致性维护和替换算法中使用的控制位的情况下,数据\(缓存\)的总容量是多少?

(2)数组元素\(a[0][31]\)和\(a[1][1]\)分别所在的主存块的\(Cache\)行号是多少(\(Cache\)行号从\(0\)开始?

(3)程序\(A和B\)的数据访问命中率是多少?哪个程序的执行时间更短?

分析:

主内存地址空间为(256 MB)

主存储器的总容量是(228)b

按字节寻址

是单位字节。

指令\(缓存\)和数据\(缓存\)是分开的。

这句话的意思是,在计算\(Cache\)容量的时候,不仅仅是计算\(Cache\)数据容量那么简单,还要计算指令占用的容量。

\(8\) \(缓存\)行,每个\(缓存\)行为\(64 B\)

将\(Cache\)的总容量计算为\ (8 * 64=2 9b \),同时也告诉我们一块主存的大小为\ (64b (2 6) \,总计为\ (2 {28}/2 {6}=2 {22}。

数据\(缓存\)是直接映射的。

直接映射意味着\(Cache\)的指令包含标志有效位。

整理:

对于主存储器

主存储器的总容量是(228)b

有\ (2 {22} \)个块,一个块的大小为\(2 ^ 6 \)。

For \(缓存\)

\(缓存\)的总容量为\ (2 9b \)

总共有(2 ^ 3)个块,其中一个块的大小为(2 ^ 6)

\(总缓存容量=缓存数据容量缓存指令容量\)

对于第一个问题:数据总容量\(缓存\)是\(缓存数据容量缓存指令容量\)

$缓存数据容量为: $ \(64 * 8\)

$Cache指令(标志位有效位)的容量为: $ \(有效位始终为1位\)。让我们找到标志位:

首先,标志位来自哪里是很清楚的。flag位是用来在\(Cache\)中查找某段内容在主存中的映射位置,所以它来自主存块的地址。

主存储器地址

主块号(直观地看到主存储器中有多少块)

马克(就是通过它来与\(缓存\)建立联系)

行号(直观查看\(缓存\))中有多少行(块)

块地址

所以很清楚:有主存地址:\(28=22(19 ^ 3)6 \)对于这个问题,所以得出\(Cache指令容量的标志位是19\),最后这个问题的答案是\(512 ^ 19 ^ 1=532 \)。

引言写作:

image

对于第二个问题:一个\(int\)类型的数据\(4\)字节,而主存(\(Cache\))是一个\(64\)字节的块,所以得出一个块可以容纳\(16\)类型的数据\(int\)。

对于\(a[0][31]\),\(32 mod 16==0\)不难知道这个元素的主存地址是\ (320 31 * 4=444=\) \ (0000.0001 \) \ (1011 \)

六个块的地址是\ (11100 \)

两位数的主存储器块号\ (0000.0110 \)

观察22位存储块编号的最后四位,以在\(Cache\)中获取该元素的第六个块

引言写作:

计算被修改元素的主存地址。

从\(高速缓存\)块大小中直接减去它即可得到结果。

\(444\) \(mod\) \(64\)=\(6\)

对于第三个问题:

当程序A存储一个元素时,由于\(Cache\)会一次性存储该元素(包括该元素)附近共16个元素,当再次访问该元素的下一个元素时,由于元素是按行和列存储的,所以元素的存储顺序与使用顺序高度一致,除了访问的第一个元素不会命中,其余15个元素都会命中,所以命中率为\ (16/11)

第二个程序逐列执行循环。当执行内部循环时,它将连续访问不同行中的相同列数据。不同行的同一列数据使用同一个\(Cache\)单元,所以不会每次都命中,命中率为0。

a明显比b快。

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now