SchoolWork-LaTeX/计算机系统结构/平时作业/第五章作业2.tex

245 lines
16 KiB
TeX
Raw Normal View History

2024-09-02 17:47:53 +08:00
\documentclass[全部作业]{subfiles}
\input{mysubpreamble}
\setcounter{chapter}{4}
\begin{document}
\begin{enumerate}
\questionandanswer[5.11]{
本题研究不同cache 设计的效果特别是将组相联cache 与5.4节中的直接映射cache进行比较。有关这些练习请参阅下面显示的字地址序列:
\mint{C}|0x03, 0xb4, 0x2b, 0xbe, 0x58, 0xbf, 0x0e, 0x1f, 0xb5, 0xba, 0x2e, 0xce|
}{}
\begin{enumerate}
\questionandanswer[5.11.1]{
[ 10 ]<5.4>绘制块大小为2字、总容量为48字的三路组相联cache 的组织结构图。图中应有类似于图5-18的样式还应该清楚地显示标签和数据字段的宽度。
}{
\includexopp[1.1]{5.11.1.1}
块大小为$2=2^{1}$所以地址中的偏移量为1位。$48 \div 3 \div 2 = 8$,所以索引有$8=2^{3}$所以地址中的索引有3位。所以标签为$64-3-1 = \bm{60}$位。一个字应该是32位并且块大小为2字那么数据字段就是$2\times 32 = \bm{64}$位。
}
\questionandanswer[5.11.2]{
[ 10 ]<5.4>从5.11.1中记录cache 的行为。假设cache使用LRU替换策略。对于每一次 cache访问,确定:
\begin{itemize}
\item 二进制字地址。
\item 标签。
\item 索引。
\item 偏移。
\item 访问会命中还是失效。
\item 在处理访问后cache每一路中有哪些标签。
\end{itemize}
}{
\includexopp[1.1]{5.11.2.1}
图中的Hit命中列用蓝色圈表示命中命中时在上一行会有蓝色框表示命中了哪个缓存。红色下划线表示在这一时刻产生了缓存替换标记了新的缓存放在哪个位置。
}
\questionandanswer[5.11.3]{
[ 5 ]<5.4>绘制块大小为1字、总容量为8字的全相联cache 的组织结构图。图中应有类似于图5-18的样式,还应该清楚地显示标签和数据字段的宽度。
}{
\includexopp[1.1]{5.11.3.1}
地址是按字索引的块大小是1字所以没有偏移量。由于是全相联所以没有索引位所以标签为64位。总容量为8字所以8个块排成一行。数据字段就是块大小即1字 $=$ 32位。
}
\questionandanswer[5.11.4]{
[ 10 ]<5.4>从5.11.3中记录cache的行为。假设cache使用LRU替换策略。对于每一次 cache访问,确定:
\begin{itemize}
\item 二进制字地址。
\item 标签。
\item 索引。
\item 偏移。
\item 访问会命中还是失效。
\item 在处理访问后cache每一路中有哪些标签。
\end{itemize}
}{
\includexopp[1.1]{5.11.4.1}
图中的Hit命中列用蓝色圈表示命中命中时在上一行会有蓝色框表示命中了哪个缓存。红色下划线表示在这一时刻产生了缓存替换标记了新的缓存放在哪个位置。
}
\questionandanswer[5.11.5]{
[ 5 ]<5.4>绘制块大小为2字、总容量为8字的全相联cache 的组织结构图。图中应有类似于图5-18的样式还应该清楚地显示标签和数据字段的宽度。
}{
\includexopp[1.1]{5.11.5.1}
块大小为2字所以偏移量为1位一个字是32位所以数据大小为64位。总容量为8字所以有4个块全相联所以4个块排成一行没有索引位所以标签为$64-1=63$位。
}
\questionandanswer[5.11.6]{
[ 10 ]<5.4>从5.11.5中记录cache 的行为。假设cache使用LRU替换策略。对于每一次 cache访问确定:
\begin{itemize}
\item 二进制字地址。
\item 标签。
\item 索引。
\item 偏移。
\item 访问会命中还是失效。
\item 在处理访问后cache每一路中有哪些标签。
\end{itemize}
}{
\includexopp[1.1]{5.11.6.1}
图中Tag列中的蓝色线表示4位分隔便于二进制转十六进制。Hit命中列用蓝色圈表示命中在命中时右侧的蓝色下划线表示命中了哪一路的标签同时也代表产生了一次访问相当于LRU把它放到链表最后。在未命中时右侧的红色下划线表示替换了哪一路的标签同时也代表产生了一次访问。
所以对于每一行填写方法是先把Tag转成十六进制再查看Way这里全相联就是四路组相联Way表示路中是否有这个十六进制地址如果有表示命中那就把上一行的Way复制下来并在命中的地址上划一条蓝色下划线如果没有表示未命中就从这行开始向上查看最近的哪条下划线距离最远表示最久没访问那么就替换这个地址其他地址不变替换后在这个地址上划一条红色下划线。
}
\end{enumerate}
\questionandanswer[5.12]{
多级cache是一种重要的技术可以在克服一级cache提供的有限空间的同时仍然保持速度。考虑具有以下参数的处理器:
\begin{center}
\small
\begin{tabularx}{\linewidth}{ZZZZZZZZ}
\toprule
无内存停顿的基本CPI & 处理器速度 & 主存访问时间 & 每条指令的 L1 cache 的失效率 * & L2 直接映射 cache 速度 & L2 直接映射 cache 全局失效率 & L2八路组相联速度 & L2八路组相联cache全局失效率 \\
\midrule
1.5 & 2GHz & 100ns & 7\% & 12cycles & 3.5\% & 28cycles & 1.5\% \\
\bottomrule
\end{tabularx}
*Ll cache失效率是针对每条指令而言的。假设Ll cache的总失效数量包括指令和数据为总指令数的7\%
\end{center}
}{
\textcolor{red}{\Large 这题的参考答案有误答案当成局部失效率计算了。全局失效率与局部失效率的定义在课本第290页}
}
\begin{enumerate}
\questionandanswer[5.12.1]{
[ 10 ]<5.4>使用以下方法计算表中处理器的CPI:仅有Ll cache;使用L2直接映射cache;使用L2八路组相联cache。如果主存访问时间加倍这些数据会如何变化?(将每个更改作为绝对CPI和百分比更改。)请注意L2 cache可以隐藏慢速内存影响的程度。
}{
先计算主存访问的时钟周期,$2 \times 10^{9} \text{Hz} \times 100 \times 10^{-9} \text{s} = 200 \text{cycles}$
全局失效率是指访问L2并且L2失效的指令数量与全部指令数量的比值局部失效率是指访问L2并且L2失效的指令数量与访问L2的指令的数量的比值。
\begin{itemize}
\item 仅有L1 cache时CPI为$1.5+7\% \times 200 = \bm{15.5}$周期;
\item 使用L2直接映射cache时CPI为 $1.5+7\% \times 12 + 3.5\% \times 200 = \bm{9.34}$周期;
\item 使用L2八路组相联cache时CPI为 $1.5+7\% \times 28 + 1.5\% \times 200 = \bm{6.46}$周期。
\end{itemize}
如果主存访问时间加倍,
\begin{itemize}
\item 仅有L1 cache时CPI为$1.5+7\% \times 400 = \bm{29.5}$周期,增加了$29.5-15.5=\bm{14}$个周期,增加了$14 / 15.5 = \bm{90.3225806451613\%}$
\item 使用L2直接映射cache时CPI为 $1.5+7\% \times 12 + 3.5\% \times 400 = \bm{16.34}$周期,增加了$16.34-9.34 = \bm{7}$个周期,增加了$7 / 15.5 = \bm{45.1612903225806\%}$
\item 使用L2八路组相联cache时CPI为 $1.5+7\% \times 28 + 1.5\% \times 400 = \bm{9.46}$周期,增加了$9.46-6.46 = \bm{3}$个周期,增加了$3 / 6.46 = \bm{46.4396284829721}\%$
\end{itemize}
}
\questionandanswer[5.12.2]{
[ 10 ]<5.4>可能有比两级更多的cache层次结构吗?已知上述处理器具有L2直接映射cache,设计人员希望添加一个L3 cache访问时间为50个时钟周期并且该cache将具有13\%的失效率。这会提供更好的性能吗?一般来说添加L3 cache有哪些优缺点?
}{
可能有比两级更多的cache层次结构。这里的13\%失效率没有说局部还全局。那么如果它是全局失效率那么肯定要比L2的全局失效率低但是这里它比L2的全局失效率高所以只能是局部失效率。
那么加入L3 cache后的CPI为$1.5+7\%\times 12 +3.5\% \times (50 + 13\% \times 200) = 5$周期 $<$ 9.34 周期,所以\boldkai{}提供更好的性能。
添加L3 cache的优点是能用更小的全局失效率兜底隐藏慢速内存影响的程度减小总体的CPI缺点是一旦全部缓存都失效必须访问主存时会产生很大的延迟。
}
\questionandanswer[5.12.3]{
[ 20 ]<5.4>在较老的处理器中例如Intel Pentium或Alpha 21264L2 cache在主处理器和Ll cache的外部(位于不同芯片上)。虽然这种做法使得大型L2 cache成为可能但是访问cache 的延迟也变得很高并且因为L2 cache以较低的频率运行所以带宽通常也很低。假设512KiB的片外L2 cache 的失效率为4\%·如果每增加一个额外的512KiB cache能够降低0.7\%的失效率并且cache 的总访问时间为50个时钟周期那么cache容量必须多大才能与上面列出的L2直接映射cache的性能相匹配?
}{
这里$4\%$的失效率应该为局部失效率。设有$x+1$个512 KiB 的片外L2 cache。那么
$$
1.5+7\%\times 12+3.5\%\times 200 = 1.5 + 7\% \times (50+(4\% - 0.7\% x)\times 200)
$$
解得
$x = - \frac{270}{7} = -38.5714285714286$,但$x$$\geqslant 0$,所以\boldkai{不存在合适的cache容量与上面列出的L2直接映射cache的性能相匹配。}
}
\end{enumerate}
\questionandanswer[5.16]{
如5.7节所述虚拟内存使用页表来跟踪虚拟地址到物理地址的映射。本题显示了在访问地址时必须如何更新页表。以下数据构成了在系统上看到的虚拟字节地址流。假设有4KiB页一个4表项全相联的TLB使用严格的LRU替换策略。如果必须从磁盘中取回页请增加下一次能取的最大页码:
\begin{center}
\begin{tabular}{cccccccc}
\toprule
十进制 & 4669 & 2227 & 13916 & 34587 & 48870 & 12608 & 49225 \\
\midrule
十六进制 & 0x123d & 0x08b3 & 0x365c & 0x871b & 0xbee6 & 0x3140 & 0xc049 \\
\bottomrule
\end{tabular}
\end{center}
TLB
\begin{center}
\begin{tabular}{cccc}
\toprule
有效位 & 标签 & 物理页号 & 上次访问时间间隔 \\
\midrule
1 & 0xb & 12 & 4 \\
1 & 0x7 & 4 & 1 \\
1 & 0x3 & 6 & 3 \\
0 & 0x4 & 9 & 7 \\
\bottomrule
\end{tabular}
\end{center}
页表
\begin{center}
\begin{tabular}{ccc}
\toprule
索引 & 有效位 & 物理页号/在磁盘中 \\
\midrule
0 & 1 & 5 \\
1 & 0 & 在磁盘中 \\
2 & 0 & 在磁盘中 \\
3 & 1 & 6 \\
4 & 1 & 9 \\
5 & 1 & 11 \\
6 & 0 & 在磁盘中 \\
7 & 1 & 4 \\
8 & 0 & 在磁盘中 \\
9 & 0 & 在磁盘中 \\
a & 1 & 3 \\
b & 1 & 12 \\
\bottomrule
\end{tabular}
\end{center}
}{}
\begin{enumerate}
\questionandanswer[5.16.1]{
[ 10 ]<5.7>对于上述每一次访问,列出:
\begin{itemize}
\item 本次访问在 TLB会命中还是失效。
\item 本次访问在页表中会命中还是失效。
\item 本次访问是否会造成缺页错误。
\item TLB的更新状态。
\end{itemize}
}{
4KiB即$2^{12}$Bytes所以对于一个十六进制地址右侧三位十六进制表示页内偏移左侧一位表示标签。
\includexopp[1.5]{5.16.1.1}
\begin{itemize}
\item TLB是否失效只需要查看是否在上一行的Tag中出现过
\item 页表是否失效,只需要看标签是否在页表中出现;
\item 如果某个标签在磁盘中,或者不在页表中,都会造成缺页错误;
\item 每次访问后TLB中的上次访问时间间隔都需要加一用蓝色表示如果TLB未命中则需要替换上次访问时间间隔最大的那一行用红色表示不管是否命中都需要把当前访问到的Tag所在的那行的上次访问时间间隔改为0用红色表示
\item 题目中的“如果必须从磁盘中取回页,请增加下一次能取的最大页码”的意思是发生缺页错误时,分配的物理页号是当前最大的物理页号加一。
\item 答案中的last access是相对顺序每次替换序号最小的一行而这里是指访问时间间隔所以每次替换最大的一行。
\end{itemize}
}
\questionandanswer[5.16.2]{
[ 15 ]<5.7>重复5.16.1但这次使用16KiB页而不是4KiB页。拥有更大页大小的优势是什么有什么缺点
}{
16KiB = $2^{14}$Bytes所以右侧14位二进制位表示页内偏移左侧2位二进制位表示页号。
\includexopp[1.5]{5.16.2.1}
由于标签只有2位所以一共4行的TLB不会出现很多次置换这里的上次访问间隔就省略了直接按照原始的TLB先置换第4行再置换第1行再置换第3行再置换第2行每次置换的行仍然用红色表示。
拥有更大页大小的优势是有更高的快表命中率,缺点是会降低内存使用率(产生了更多内零头)。
}
\questionandanswer[5.16.3]{
[ 15 ]<5.7>重复5.16.1但这次使用4KiB页和一个两路组相联TLB。
}{
一个页是4KiB两个页组成一行。右侧12位表示页内偏移中间1位表示索引左侧3位表示标签。页号仍然是左侧4位。
\includexopp[1.1]{5.16.3.1}
}
\questionandanswer[5.16.4]{
[ 15 ]<5.7>重复5.16.1但这次使用4KiB页和一个直接映射 TLB。
}{
一个页是4KiB右侧12位表示页内偏移中间2位表示索引左侧2位表示标签。页号仍然是左侧4位。
\includexopp[1.5]{5.16.4.1}
}
\questionandanswer[5.16.5]{
[ 10 ]<5.4,5.7>讨论为什么CPU必须使用TLB才能实现高性能。如果没有TLB如何处理虚拟内存访问
}{
为了便于编写程序写代码时不需要指定某段数据放在哪个物理地址中出现了虚拟地址为了将虚拟地址存放到实际的物理地址中需要有个表存放这个映射关系这就是页表而页表存放在内存中访问比较慢。但是每次访问虚拟地址时都需要访问一次页表再访问实际的数据也就是访问两次内存所以就出现了TLB快表作为页表的缓存在TLB命中时只需要访问一次内存从而提升性能。
如果没有TLB每次虚拟内存访问就需要访问两次内存第一次访问页表第二次再访问实际的数据。
}
\end{enumerate}
\end{enumerate}
\end{document}