├── .gitignore ├── Homework2 ├── 2.jpg ├── HW2.pdf ├── HW2-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── Homework3 ├── HW3.pdf ├── HW3-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── Homework4 ├── 3-10.pdf ├── HW4.pdf ├── HW4-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── Homework6 ├── HW6.pdf ├── HW6-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── Homework7 ├── hw7.pdf ├── Figure │ ├── 5-12.pdf │ └── 5-24.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── Homework1 ├── HW1-正式版.pdf ├── HW1-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex ├── README.md └── Homework5 ├── HW5-solution.pdf ├── PB17000297_罗晏宸.pdf └── PB17000297_罗晏宸.tex /.gitignore: -------------------------------------------------------------------------------- 1 | *.aux 2 | *.log 3 | *.out 4 | *.synctex.gz -------------------------------------------------------------------------------- /Homework2/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework2/2.jpg -------------------------------------------------------------------------------- /Homework2/HW2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework2/HW2.pdf -------------------------------------------------------------------------------- /Homework3/HW3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework3/HW3.pdf -------------------------------------------------------------------------------- /Homework4/3-10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework4/3-10.pdf -------------------------------------------------------------------------------- /Homework4/HW4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework4/HW4.pdf -------------------------------------------------------------------------------- /Homework6/HW6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework6/HW6.pdf -------------------------------------------------------------------------------- /Homework7/hw7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework7/hw7.pdf -------------------------------------------------------------------------------- /Homework1/HW1-正式版.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework1/HW1-正式版.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Architecture-Homework 2 | Homework assignments of Computer Architecture (USTC 2020 spring) 3 | -------------------------------------------------------------------------------- /Homework1/HW1-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework1/HW1-solution.pdf -------------------------------------------------------------------------------- /Homework2/HW2-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework2/HW2-solution.pdf -------------------------------------------------------------------------------- /Homework3/HW3-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework3/HW3-solution.pdf -------------------------------------------------------------------------------- /Homework4/HW4-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework4/HW4-solution.pdf -------------------------------------------------------------------------------- /Homework5/HW5-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework5/HW5-solution.pdf -------------------------------------------------------------------------------- /Homework6/HW6-solution.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework6/HW6-solution.pdf -------------------------------------------------------------------------------- /Homework7/Figure/5-12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework7/Figure/5-12.pdf -------------------------------------------------------------------------------- /Homework7/Figure/5-24.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework7/Figure/5-24.pdf -------------------------------------------------------------------------------- /Homework1/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework1/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework2/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework2/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework3/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework3/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework4/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework4/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework5/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework5/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework6/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework6/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework7/PB17000297_罗晏宸.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc0930/Architecture-Homework/HEAD/Homework7/PB17000297_罗晏宸.pdf -------------------------------------------------------------------------------- /Homework7/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{amssymb} 8 | \usepackage[colorlinks, linkcolor = black]{hyperref} 9 | \usepackage{float} 10 | \usepackage[table, xcdraw]{xcolor} 11 | \usepackage{graphicx} 12 | \usepackage{listings} 13 | \lstset{ 14 | basicstyle = \ttfamily, 15 | keywordstyle = \bfseries, 16 | commentstyle = \textnormal, 17 | % linewidth = \linewidth, 18 | xleftmargin = 0.1\textwidth, 19 | % xrightmargin = 0pt, 20 | frame = none, 21 | escapeinside = ``, 22 | } 23 | 24 | \title{Homework 7} 25 | \author{PB17000297 罗晏宸} 26 | \date{May 30 2020} 27 | 28 | \begin{document} 29 | \maketitle 30 | 31 | \section{Exercise 5.6} 32 | 假定图 \ref{5-24} 的缓存内容和和表 \ref{5-12} 中实现方式 1 的定时参数。以下代码序列在基本协议和练习 5.5 的新 MESI 协议中的总停顿周期为多少?假定不需要互连事务的状态转换不会导致额外的停顿周期。 33 | \begin{figure}[h] 34 | \centering 35 | \includegraphics[scale = 0.78]{Figure/5-24.pdf} 36 | \caption{\textbf{多核(点对点)多处理器}} 37 | \label{5-24} 38 | \end{figure} 39 | \begin{figure}[h] 40 | \centering\caption{\textbf{监听一致性延迟}} 41 | \label{5-12} 42 | \includegraphics[scale = 1]{Figure/5-12.pdf} 43 | \end{figure} 44 | \subparagraph{a} 45 | \begin{lstlisting}[] 46 | P0: read 100 47 | P0: write 100 <-- 40 48 | \end{lstlisting} 49 | \subparagraph{b} 50 | \begin{lstlisting}[] 51 | P0: read 120 52 | P0: write 120 <-- 60 53 | \end{lstlisting} 54 | \subparagraph{c} 55 | \begin{lstlisting}[] 56 | P0: read 100 57 | P0: read 120 58 | \end{lstlisting} 59 | \subparagraph{d} 60 | \begin{lstlisting}[] 61 | P0: read 100 62 | P1: write 100 <-- 60 63 | \end{lstlisting} 64 | \subparagraph{e} 65 | \begin{lstlisting}[] 66 | P0: read 100 67 | P0: write 100 <-- 60 68 | P1: write 100 <-- 40 69 | \end{lstlisting} 70 | \paragraph{解} 71 | \subparagraph{a} \lstinline{P0: read 100} ,发生读缺失,读取内存,停顿 100 个周期,若在 MSI 协议中,则进入状态 S ,若在 MESI 协议中,则进入状态 E ; \lstinline{P0: write 100} ,若在 MSI 协议中,发生写命中,发送失效信号,若在 MESI 协议中,则不发送失效信号,进入状态 M 。 72 | 73 | 因此 MSI 协议中的总停顿周期 74 | $$ 75 | 100 + 15 = 115 76 | $$ 77 | 78 | MESI 协议中的总停顿周期 79 | $$ 80 | 100 + 0 = 100 81 | $$ 82 | 83 | \subparagraph{b} \lstinline{P0: read 120} ,发生读缺失,读取内存,停顿 100 个周期,在 MSI 协议或 MESI 协议中,均进入状态 S ; \lstinline{P0: write 120} ,在 MSI 协议或 MESI 协议中,均发生写命中,发送失效信号。 84 | 85 | 因此 MSI 协议与 MESI 协议中的总停顿周期均为 86 | $$ 87 | 100 + 15 = 115 88 | $$ 89 | 90 | \subparagraph{c} \lstinline{P0: read 100} ,发生读缺失,读取内存,停顿 100 个周期,若在 MSI 协议中,则进入状态 S ,若在 MESI 协议中,则进入状态 E ; \lstinline{P0: read 120} ,发生读缺失,读取内存,停顿 100 个周期,在 MSI 协议或 MESI 协议中,均进入状态 S 。 91 | 92 | 因此 MSI 协议与 MESI 协议中的总停顿周期均为 93 | $$ 94 | 100 + 100 = 200 95 | $$ 96 | 97 | \subparagraph{d} \lstinline{P0: read 100} ,发生读缺失,读取内存,停顿 100 个周期,若在 MSI 协议中,则进入状态 S ,若在 MESI 协议中,则进入状态 E ; \lstinline{P0: write 100} ,发生写缺失,读取内存,停顿 100 个周期,不需要发送失效信号。 98 | 99 | 因此 MSI 协议与 MESI 协议中的总停顿周期均为 100 | $$ 101 | 100 + 100 = 200 102 | $$ 103 | 104 | \subparagraph{e} \lstinline{P0: read 100} ,发生读缺失,读取内存,停顿 100 个周期,若在 MSI 协议中,则进入状态 S ,若在 MESI 协议中,则进入状态 E ; \lstinline{P0: write 100} ,若在 MSI 协议中,发生写命中,发送失效信号,若在 MESI 协议中,则不发送失效信号,进入状态 M 。 \lstinline{P1: write 100} ,发生写缺失,在 MSI 协议或 MESI 协议中,从 P0 缓存中读取脏块, 再将脏块写回内存。 105 | 106 | 因此 MSI 协议中的总停顿周期 107 | $$ 108 | 100 + 15 + 40 + 10 = 165 109 | $$ 110 | 111 | MESI 协议中的总停顿周期 112 | $$ 113 | 100 + 0 + 40 + 10 = 150 114 | $$ 115 | 116 | \end{document} -------------------------------------------------------------------------------- /Homework1/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{siunitx} 8 | \usepackage{float} 9 | \title{Homework 1} 10 | \author{PB17000297 罗晏宸} 11 | \date{March 1 2020} 12 | 13 | \begin{document} 14 | \maketitle 15 | 16 | \section{Exercise 1.8} 17 | 架构师面对的一个挑战是, 今天拟定的设计方案可能需要几年的时间进行实施、 验证和测试, 然后才能上市。这就意味着架构师必须提前为几年后的技术进步制定计划。有时, 这很难做到。 18 | \subparagraph{1} 19 | 根据摩尔定律观测到的器件发展趋势, 到2025年, 一个芯片上的晶体管数目应当是2005年的多少倍? 20 | \subparagraph{2} 21 | 芯片性能的提升也反映了这一趋势。 如果2003年后芯片性能仍以20世纪90年代的相同速度攀升, 到2025年芯片的性能将会是VAX-11/780的多少倍? 22 | \subparagraph{3} 23 | 若2003年后以当前的增长速率, 2025年的芯片性能将会是VAX-11/780的多少倍? 24 | \subparagraph{4} 25 | 是什么限制了时钟频率的增长速度? 为了提升性能, 架构师现在能用多出来的晶体管做些什么? 26 | \subparagraph{5} 27 | DRAM容量的增长速度也已变缓慢。20年来, DRAM容量每年提高60\%。如果\SI{8}{Gbit} DRAM在2015年首次出现, \SI{16}{Gbit}直到2019年才出现, 那么DRAM容量这段时间的增长速率是多少? 28 | 29 | \paragraph{解} 30 | \subparagraph{1} 31 | 晶体管密度每年大约增加35\%,因此经过20年: 32 | \begin{equation*} 33 | (1 + 35\%)^{20} \approx 404.274 34 | \end{equation*} 35 | 即2025年时一个芯片上的晶体管数目约是2005年的400倍。 36 | \subparagraph{2} 37 | 2003年时处理器性能为Intel Xeon EE \SI{3.2}{GHz},若芯片性能仍以20世纪90年代的速度年增长52\%攀升,则 38 | \begin{equation*} 39 | \frac{\SI{3.2}{GHz} \times (1 + 52\%)^{22}}{\SI{5}{MHz}} \approx 6.40824 \times 10^{6} 40 | \end{equation*} 41 | 即到2025年芯片的性能将会是VAX-11/780的约640万倍。 42 | \subparagraph{3} 43 | 若2003年后以当前的增长速率22\%, 则 44 | \begin{equation*} 45 | \frac{\SI{3.2}{GHz} \times (1 + 22\%)^{22}}{\SI{5}{MHz}} \approx 50827.2 46 | \end{equation*} 47 | 即到2025年芯片的性能将会是VAX-11/780的约5万倍。 48 | \subparagraph{4} 49 | 2003年之后,功耗和可用指令级并行的限制减慢了单核处理器性能的增长速度,在越来越小的区域内,功率密度不断增加,产生的热量使得散热器工作效率过低,这限制了芯片上晶体管的活动。架构师不再一味增加时钟频率,而是在芯片上放置多个内核。 50 | \subparagraph{5} 51 | 设DRAM容量这段时间的年增长速率为$x$,则有 52 | \begin{align*} 53 | &&\SI{8}{Gbit} \times (1 + x)^{4} &= \SI{16}{Gbit} \\ 54 | \Rightarrow && (1 + x)^{4} &= 2 \\ 55 | \Rightarrow && 1 + x &= \sqrt[4]{2} \\ 56 | \Rightarrow && x &\approx 0.189 57 | \end{align*} 58 | 即DRAM容量在2015至2019年间的增长速率为$18.9\%$ 59 | 60 | \section{Exercise 1.17} 61 | 公司刚刚买了一个新的Intel Core i5双核处理器, 你接到针对这一处理器来优化软件的任务。 你将在这个处理器上运行两个应用程序, 但它们的资源需求并不一样。第一个程序需要80\%的资源, 另一个需要20\%的资源。假定对该程序的一部分进行并行化时, 该部分的加速比为2. 62 | \subparagraph{1} 63 | 假定第一个应用程序的40\%可以并行化, 那么在隔离运行时, 通过这个应用程序可以实现多大的加速比? 64 | \subparagraph{2} 65 | 假定第二个应用程序的99\%可以并行化, 那么在隔离运行时, 通过这个应用程序可以实现多大的加速比? 66 | \subparagraph{3} 67 | 假定第一个应用程序的40\%可以并行化, 如果对其实现并行化, 系统总加速比为多少? 68 | \subparagraph{4} 69 | 假定第二个应用程序的99\%可以并行化, 如果对其实现并行化, 系统总加速比为多少? 70 | 71 | \paragraph{解} 72 | \subparagraph{1} 73 | 通过这个应用程序可以实现的加速比为: 74 | \begin{equation*} 75 | \frac{1}{60\% + \frac{40\%}{2}} = \frac{5}{4} = 1.25 76 | \end{equation*} 77 | \subparagraph{2} 78 | 通过这个应用程序可以实现的加速比为: 79 | \begin{equation*} 80 | \frac{1}{1\% + \frac{99\%}{2}} = \frac{200}{101} \approx 1.98 81 | \end{equation*} 82 | \subparagraph{3} 83 | 系统总加速比为: 84 | \begin{equation*} 85 | \frac{1}{80\% \times (60\% + \frac{40\%}{2}) + 20\%} = \frac{25}{21} \approx 1.19 86 | \end{equation*} 87 | \subparagraph{4} 88 | 系统总加速比为: 89 | \begin{equation*} 90 | \frac{1}{80\% + 20\% \times (1\% + \frac{99\%}{2})} = \frac{1000}{901} \approx 1.11 91 | \end{equation*} 92 | 93 | \section{} 94 | 假设你的load/store计算机具有以下指令组合: 95 | \begin{table}[H] 96 | \centering 97 | \begin{tabular}{|l|c|c|} 98 | \hline 99 | Operations & Frequency & No. of Clock Cycle \\ \hline 100 | ALU ops & 35\% & 1 \\ \hline 101 | Load & 25\% & 2 \\ \hline 102 | Store & 15\% & 2 \\ \hline 103 | Branches & 25\% & 3 \\ \hline 104 | \end{tabular} 105 | \end{table} 106 | \subparagraph{1} 107 | 计算CPI. 108 | \subparagraph{2} 109 | 我们观察到35\%的ALU操作都伴随着一条load指令。 现在我们用一条新的指令来替代这些ALU操作和与之对应的load操作, 这条新指令的执行需要花费1个时钟周期。加入这条指令后, branches需要花费5个时钟周期。请计算新 110 | 版本的CPI。 111 | \subparagraph{3} 112 | 如果新版本的时钟周期时间是旧版本的1.2倍, 那么哪个版本的CPU执行时 113 | 间更短? 114 | 115 | \paragraph{解} 116 | \subparagraph{1} 117 | \begin{align*} 118 | \text{CPI} &= 35\% \times 1 + 25\% \times 2 + 15\% \times 2 + 25\% \times 3 \\ 119 | &= 0.35 + 0.5 + 0.3 + 0.75 \\ 120 | &= 1.9 121 | \end{align*} 122 | \subparagraph{2} 123 | \begin{align*} 124 | \text{CPI}' =& (35\% - 35\% \times 35\%) \times 1 + (25\% - 35\% \times 35\%) \times 2 + \\ 125 | & \indent (35\% \times 35\%) \times 1 + 15\% \times 2 + 25\% \times 5 \\ 126 | =& 0.2275 + 0.255 + 0.1225 + 0.3 + 1.25 \\ 127 | =& 2.1555 128 | \end{align*} 129 | \subparagraph{3} 130 | 两个版本的CPU执行时间之比为: 131 | \begin{equation*} 132 | \frac{2.1555 \times 1.2}{1.9} \approx 1.361 > 1 133 | \end{equation*} 134 | 因此旧版本CPU执行时间更短。 135 | \end{document} -------------------------------------------------------------------------------- /Homework6/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{amssymb} 8 | \usepackage[table, xcdraw]{xcolor} 9 | \usepackage{listings} 10 | \lstset{ 11 | basicstyle = \ttfamily, 12 | keywordstyle = \bfseries, 13 | linewidth = \linewidth, 14 | % xleftmargin=.1\textwidth, 15 | % xrightmargin=.1\textwidth, 16 | breaklines = true, 17 | breakatwhitespace = true, 18 | breakautoindent = true, 19 | frame = none, 20 | commentstyle = \small\color{gray} 21 | } 22 | \usepackage{siunitx} 23 | \sisetup{ 24 | binary-units = true 25 | } 26 | \usepackage{enumerate} 27 | \usepackage{enumitem} 28 | 29 | \title{Homework 6} 30 | \author{PB17000297 罗晏宸} 31 | \date{May 18 2020} 32 | 33 | \begin{document} 34 | \maketitle 35 | 36 | \section{Exercise 4.9} 37 | 假定处理器运行频率为 \SI{700}{\mega\hertz},最大向量长度为 64,载入/存储单元的启动开销为 15 个时钟周期,乘法单元为 8 个时钟周期,加法/减法单元为 5 个时钟周期。在该处理器上进行如下运算,将两个包含单精度复数值的向量相乘: 38 | \begin{lstlisting}[breaklines = false, language=C++] 39 | for (i = 0; i < 300; i++) { 40 | c_re[i] = a_re[i] * b_re[i] - a_im[i] * b_im[i]; 41 | c_im[i] = a_re[i] * b_im[i] + a_im[i] * b_re[i]; 42 | } 43 | \end{lstlisting} 44 | \subparagraph{(1)} 这个内核的运算密度为多少(注:运算密度指运行程序时执行的\textbf{浮点运算数}除以主存储器中\textbf{访问的字节数})? 45 | \subparagraph{(2)} 将此循环转换为使用条带挖掘(Strip Mining)的 VMIPS 汇编代码。 46 | \subparagraph{(3)} 假定采用链接和单一存储器流水线,需要多少次钟鸣?每个复数结果值需要多少个时钟周期(包括启动开销在内)? 47 | \subparagraph{(4)} 如果向量序列被链接在一起,每个复数结果值需要多少个时钟周期(包含开销)? 48 | \subparagraph{(5)} 现在假定处理器有三条存储器流水线和链接。如果该循环的访问过程中没有组冲突,每个结果需要多少个时钟周期? 49 | 50 | \paragraph{解} 51 | \subparagraph{(1)} 执行 6 次浮点运算,读 4 个浮点数,写 2 个浮点数,访问 $(4 + 2) \times 4 = 24$ 个字节。内核运算密度为 52 | $$ 53 | \frac{6}{(4 + 2) \times 4} = \frac{1}{4} 54 | $$ 55 | \subparagraph{(2)} 56 | \begin{lstlisting}[language={[x86masm]Assembler}, breakindent = 41ex] 57 | li $VL, 44 ; 前 44 步操作 58 | li $r1, 0 ; 初始化下标 59 | loop: lv $v1, a_re + $r1 ; load a_re 60 | lv $v3, b_re + $r1 ; load b_re 61 | mulvv.s $v5, $v1, $v3 ; a_re * b_re 62 | lv $v2, a_im + $r1 ; load a_im 63 | lv $v4, b_im + $r1 ; load b_im 64 | mulvv.s $v6, $v2, $v4 ; a_im * b_im 65 | subvv.s $v5, $v5, $v6 ; a_re * b_re - a_im * b_im 66 | sv $v5, c_re + $r1 ; store c_re 67 | mulvv.s $v5, $v1, $v4 ; a_re * b_im 68 | mulvv.s $v6, $v2, $v3 ; a_im * b_re 69 | addvv.s $v5, $v5, $v6 ; a_re * b_im + a_im * b_re 70 | sv $v5, c_im + $r1 ; store c_im 71 | bne $r1, 0, else ; 是否首次循环 72 | addi $r1, $r1, #176 ; 首次循环 73 | j loop ; 跳转下次循环 74 | else: addi $r1, $r1, #256 ; 非首次循环 75 | skip: blt $r1, 1200, loop ; 跳转下次循环 76 | \end{lstlisting} 77 | 78 | \subparagraph{(3)} 79 | \begin{lstlisting}[language={[x86masm]Assembler}, numbers = left, xleftmargin=.2\textwidth] 80 | mulvv.s lv 81 | lv mulvv.s 82 | subvv.s sv 83 | mulvv.s lv ; load 下一个向量 84 | mulvv.s lv ; load 下一个向量 85 | addvv.s sv 86 | \end{lstlisting} 87 | 共需要 6 次钟鸣,每个复数结果值需要的时钟周期为 88 | $$ 89 | \frac{6 \times 64 + 15 \times 6 + 8 \times 4 + 5 \times 2}{2 \times 64} = \frac{516}{128} = \frac{129}{32} = 4.03125 90 | $$ 91 | \subparagraph{(5)} 92 | \begin{lstlisting}[language={[x86masm]Assembler}, numbers = left, xleftmargin=.2\textwidth] 93 | mulvv.s 94 | mulvv.s 95 | subvv.s sv 96 | mulvv.s 97 | mulvv.s lv 98 | addvv.s sv lv lv lv ; load 下一个向量 99 | \end{lstlisting} 100 | 共需要 6 次钟鸣,因此每个复数结果值需要的时钟周期为$4.03125$与上相同。 101 | 102 | \section{Exercise 4.16} 103 | 假定一个虚设 GPU 具有以下特性: 104 | \begin{enumerate}[leftmargin = .1\linewidth, rightmargin = .1\linewidth, label=$\bullet$] 105 | \item 时钟频率为 \SI{1.5}{\giga\hertz} 106 | \item 包含 16 个 SIMD 处理器,每个处理器包含 16 个单精度浮点单元 107 | \item 片外存储器带宽为 \SI{100}{{\giga\byte}\per\second} 108 | \end{enumerate} 109 | \subparagraph{(1)} 不考虑存储器带宽,假定所有存储器延迟可以隐藏,则这一 GPU 的峰值单精度浮点吞吐量为多少 \si{GFLOP\per\second}? 110 | \subparagraph{(2)} 在给定存储器带宽限制下,这一吞吐量是否可持续? 111 | \paragraph{解} 112 | \subparagraph{(1)} 113 | $$ 114 | \SI{1.5}{\giga\hertz} \times 16 \times 16 = \SI{384}{GFLOP\per\second} 115 | $$ 116 | \subparagraph{(2)} 117 | 每个单精度运算需要读 2 个操作数,写 1 个操作数,访问$(2 + 1) \times 4 = 12$个字节,需要$\SI{12}{\byte} \times \SI{384}{GFLOP\per\second} = \SI{4608}{{\giga\byte}\per\second}$,因此吞吐量不可持续。 118 | 119 | \section{Exercise 4.13} 120 | 假定有一种包含 10 个 SIMD 处理器的 GPU 体系结构。每条 SIMD 指令的宽度为 32,每个 SIMD 处理器包含 8 个车道,用于执行单精度运算和载入/存储指令,也就是说,每个非分岔 SIMD 指令每 4 个时钟周期可以生成 32 个结果。假定内核的分岔分支将导致平均 80\%的线程为活动的。假定在所执行的全部 SIMD 指令中,70\%为单精度运算,20\%为载入/存储。由于并不包含所有存储器延迟,所以假定SIMD 指令平均发射率为 0.85。假定 GPU 的时钟速度为 \SI{1.5}{\giga\hertz}。 121 | \subparagraph{(1)} 计算这个内核在这个 GPU 上的吞吐量,单位为 \si{GFLOP\per\second}。 122 | \subparagraph{(2)} 对于以下改进中的\textbf{每一项},吞吐量的加速比为多少? 123 | \begin{enumerate}[leftmargin = .2\linewidth, rightmargin = .2\linewidth, label=\textcircled{\arabic*}] 124 | \item 将单精度车道数增大至 16 125 | \item 将 SIMD 处理器数增大至 15(假定这一改变不会影响所有其他性能度量,代码会扩展到增加的处理器上)。 126 | \item 添加缓存可以有效地将存储器延迟缩减 40\%,这样会将指令发射率增加至0.95。 127 | \end{enumerate} 128 | 129 | \paragraph{解} 130 | \subparagraph{(1)} 131 | $$ 132 | \SI{1.5}{\giga\hertz} \times 80\% \times 85\% \times 70\% \times 10 \times 8 = \SI{57.12}{GFLOP\per\second} 133 | $$ 134 | \subparagraph{(2)} 135 | \begin{enumerate}[leftmargin = .2\linewidth, rightmargin = .2\linewidth, label=\textcircled{\arabic*}] 136 | \item 加速比为 137 | \begin{align*} 138 | & \frac{ \SI{1.5}{\giga\hertz} \times 80\% \times 85\% \times 70\% \times 10 \times 16}{\SI{57.12}{GFLOP\per\second}} \\ 139 | = & \frac{\SI{114.24}{GFLOP\per\second}}{\SI{57.12}{GFLOP\per\second}} \\ 140 | = & 2 141 | \end{align*} 142 | \item 加速比为 143 | \begin{align*} 144 | & \frac{ \SI{1.5}{\giga\hertz} \times 80\% \times 85\% \times 70\% \times 15 \times 8}{\SI{57.12}{GFLOP\per\second}} \\ 145 | = & \frac{\SI{85.68}{GFLOP\per\second}}{\SI{57.12}{GFLOP\per\second}} \\ 146 | = & 1.5 147 | \end{align*} 148 | \item 加速比为 149 | \begin{align*} 150 | & \frac{ \SI{1.5}{\giga\hertz} \times 80\% \times 95\% \times 70\% \times 10 \times 8}{\SI{57.12}{GFLOP\per\second}} \\ 151 | = & \frac{\SI{63.84}{GFLOP\per\second}}{\SI{57.12}{GFLOP\per\second}} \\ 152 | = & \frac{19}{17} \\ 153 | = & 1.118 154 | \end{align*} 155 | \end{enumerate} 156 | \end{document} -------------------------------------------------------------------------------- /Homework5/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{amssymb} 8 | \usepackage[colorlinks, linkcolor = black]{hyperref} 9 | \usepackage{float} 10 | \usepackage[table, xcdraw]{xcolor} 11 | \usepackage{graphicx} 12 | \usepackage{booktabs} 13 | \usepackage{subcaption} 14 | \usepackage{tikz} 15 | 16 | \title{Homework 5} 17 | \author{PB17000297 罗晏宸} 18 | \date{April 30 2020} 19 | 20 | \begin{document} 21 | \maketitle 22 | 23 | \section{Exercise 3.15} 24 | 假设有一条长流水线,仅仅对条件转移指令使用分支目标缓冲。假定分支预测错误的开销为 4 个时钟周期,缓冲不命中的开销为 3 个时钟周期。假设命中率为 90\%,准确率为 90\%,分支频率为 15\%,没有分支的基本 CPI 为 1. 25 | \subparagraph{a.} 求程序执行的 CPI。 26 | \subparagraph{b.} 相对于固定 2 个时钟周期延迟的分支处理,哪种更快? 27 | 28 | \paragraph{解} 29 | \subparagraph{a} 30 | 有 BTB 的停顿数可计算如下 31 | \begin{table} 32 | \centering 33 | \begin{tabular}{cclc} 34 | \toprule 35 | BTB 结果 & BTB 预测 & 频率 & 代价 \\ 36 | \midrule 37 | 未命中 & & $15\% \times 10\% = 1.50\%$ & 3 \\ 38 | 命中 & 正确 & $15\% \times 90\% \times 90\% = 12.15\%$ & 0 \\ 39 | 命中 & 错误 & $15\% \times 90\% \times 10\% = 1.35\%$ & 4 \\ 40 | \bottomrule 41 | \end{tabular} 42 | \end{table} 43 | \begin{align*} 44 | \text{Stalls}_{\text{BTB}} & = (1.50\% \times 3) + (12.15\% \times 0) + (1.35\% \times 4) \\ 45 | & = 0.099 \\ 46 | \text{CPI}_{\text{BTB}} & = \text{CPI}_{\text{基本}} + \text{Stalls}_{\text{BTB}} \\ 47 | & =1.0 + 0.099 \\ 48 | & =1.099 49 | \end{align*} 50 | 51 | \subparagraph{b.} 52 | 加速比为 53 | \begin{align*} 54 | \frac{\text{CPI}_{\text{无 BTB}}}{\text{CPI}_{\text{BTB}}} = \frac{1.0 + 15\% \times 2}{1.099} \approx 1.183 > 1 55 | \end{align*} 56 | 因此使用分支目标缓冲的方法相比于固定 2 个时钟周期延迟的分支处理更快。 57 | 58 | \section{} 59 | 假设分支目标缓冲的命中率为 90\%,程序中无条件转移的指令为 5\%,其他指 60 | 令 CPI 为 1。假设分支目标缓冲包含分支目标指令,允许无条件转移指令进入分支目标缓冲,则 CPI 为多少。假定原来的 CPI 为 1.1。 61 | 62 | \paragraph{解} 63 | % 无条件分支指令的特点是只要执行肯定分支成功。因此,对于进入分支目标缓冲器的无条件分支指令,分支预测的精度为100\%,也就不会带来分支延迟。而没有进入分支目标缓冲器的无条件分支指令会带来一定分支延迟。首先要求出一条无条件分支指令的分支延迟是多少,不妨设为 $x$ 个时钟周期。 由题知无条件分支指令不进入分支目标缓冲时程序执行的 CPI 为 1.1 ,而程序中没有无条件转移指令的 CPI 为 1 ,因此有 64 | 设无条件分支指令的分支延迟为$x$个时钟周期,由题分支目标缓冲包含分支目标指令,有 65 | \begin{align*} 66 | & & \text{CPI} & = \text{CPI}_{\text{基本}} + \text{Stalls}_{\text{BTB}} \\ 67 | & & & = 1.0 + 5\% \times x \\ 68 | & & & = 1.1 \\ 69 | \Rightarrow & & x & = 2 70 | \end{align*} 71 | 因此,允许无条件分支指令进入分支目标缓冲器时有 72 | \begin{equation*} 73 | \text{CPI}' = 1.0 + 5\% \times (1 - 90\%) \times 2 = 1.01 74 | \end{equation*} 75 | 76 | \section{} 77 | 设指令流水线由取指令、分析指令和执行指令 3 个部件构成,每个部件经过的时间为 $\Delta t$,连续流入 12 条指令。分别画出标量流水处理机以及 ILP 均为 4 的超标量处理机、超长指令字处理机的时空图,并分别计算它们相对于标量流水处理机的加速比。 78 | 79 | \paragraph{解} 80 | 标量流水处理机以及 ILP 均为 4 的超标量处理机、超长指令字处理机的时空图分别如图\ref{figure:1}(\subref{1} - \subref{4})所示。 81 | \begin{figure}[h] 82 | \centering 83 | \begin{subfigure}{\textwidth} 84 | \centering 85 | \begin{tikzpicture}[scale = 0.5] 86 | \draw[->] (0, 0) -- (15, 0) coordinate (x axis); 87 | \draw[->] (0, 0) -- (0, 4) coordinate (y axis); 88 | \node at (16, -0.5) [] {时间}; 89 | \foreach \y/\ytext in {0.5/取指, 1.5/分析, 2.5/执行 } 90 | \node at (-1, \y) [] {\ytext}; 91 | \draw (0, 0) grid (12, 1); 92 | \draw (1, 1) grid (13, 2); 93 | \draw (2, 2) grid (14, 3); 94 | \draw[dashed] (14, 2) -- (14, 0) node [below] {14}; 95 | \end{tikzpicture} 96 | \caption{标量流水处理机的时空图} 97 | \label{1} 98 | \end{subfigure} 99 | \begin{subfigure}{.49\textwidth} 100 | \begin{tikzpicture}[scale = 0.5] 101 | \draw[->] (0, 0) -- (6, 0) coordinate (x axis); 102 | \draw[->] (0, 0) -- (0, 13) coordinate (y axis); 103 | \node at (7, -0.5) [] {时间}; 104 | \foreach \y/\ytext [evaluate=\y as \z using int(\y + 4)] in {0/取指, 4/分析, 8/执行 } 105 | \draw[|<->|] (-0.5, \y) to node [left] {\ytext} (-0.5, \z); 106 | \draw (0, 0) grid (3, 4); 107 | \draw (1, 4) grid (4, 8); 108 | \draw (2, 8) grid (5, 12); 109 | \draw[dashed] (5, 8) -- (5, 0) node [below] {5}; 110 | \draw[dashed] (1, 8) -- (0, 8); 111 | \draw[dashed] (2, 12) -- (0, 12); 112 | \end{tikzpicture} 113 | \caption{超标量处理机时空图} 114 | \label{2} 115 | \end{subfigure} 116 | \begin{subfigure}{.49\textwidth} 117 | \begin{tikzpicture}[scale = 0.5] 118 | \draw[->] (0, 0) -- (6, 0) coordinate (x axis); 119 | \draw[->] (0, 0) -- (0, 7) coordinate (y axis); 120 | \node at (7, -0.5) [] {时间}; 121 | \draw[|<->|] (-0.5, 2) to node [left] {执行} (-0.5, 6); 122 | \foreach \y/\ytext in {0.5/取指, 1.5/分析} 123 | \node at (-1.5, \y) [] {\ytext}; 124 | \draw (0, 0) grid (3, 1); 125 | \draw (1, 1) grid (4, 2); 126 | \draw (2, 2) grid (5, 6); 127 | \draw[dashed] (5, 2) -- (5, 0) node [below] {5}; 128 | \draw[dashed] (1, 2) -- (0, 2); 129 | \draw[dashed] (2, 6) -- (0, 6); 130 | \end{tikzpicture} 131 | \caption{超长指令字处理机时空图} 132 | \label{3} 133 | \end{subfigure} 134 | \begin{subfigure}{.49\textwidth} 135 | \begin{tikzpicture}[scale = 0.5] 136 | \draw[->] (0, 0) -- (6.5, 0) coordinate (x axis); 137 | \draw[->] (0, 0) -- (0, 13) coordinate (y axis); 138 | \node at (7.5, -0.5) [] {时间}; 139 | \foreach \y/\ytext [evaluate = \y as \z using int(\y + 4)] in {0/取指, 4/分析, 8/执行 } 140 | \draw[|<->|] (-0.5, \y) to node [left] {\ytext} (-0.5, \z); 141 | \foreach \x [evaluate = \x as \y using (\x * 4)] in {0, 0.25, 0.5, ..., 2.75} 142 | \draw[shift={(\x, \y)}] (0, 0) grid +(3, 1); 143 | \foreach \x/\y in {4/4, 5/8, 5.75/11} 144 | \draw[dashed] (\x, \y) -- (\x, 0) node [below] {\x}; 145 | \draw[dashed] (2, 8) -- (0, 8); 146 | \draw[dashed] (2.75, 12) -- (0, 12); 147 | \end{tikzpicture} 148 | \caption{超流水处理机的时空图} 149 | \label{4} 150 | \end{subfigure} 151 | \caption{流水线时空图} 152 | \label{figure:1} 153 | \end{figure} 154 | 对于标量流水处理机,由图\subref{1}可知执行完 12 条指令需要 $T_1 = 14 \Delta t$。ILP 为 4的超标量流水处理机中,每个时钟周期同时启动 4 条指令,由图\subref{2}可知执行完 12 条指令需要 $T_2 = 5 \Delta t$。对于超长指令字处理机,每 4 条指令组成 1 条长指令,12 条指令共形成 3 条长指令,\subref{3}可知执行完需要 $T_3 = 5 \Delta t$。对于超流水处理机,每 $\dfrac{1}{4}$ 个时钟周期启动 1 条指令。由图\subref{4}可知执行完 12 条指令需 $T_4 = 5.75 \Delta t$ 155 | 156 | ILP 均为 4 的超标量处理机、超长指令字处理机相对于标量流水处理机的加速比可计算如下 157 | \begin{align*} 158 | \text{加速比}_1 &= 1.0 \\ 159 | \text{加速比}_2 &= \frac{T_1}{T_2} = \frac{14 \Delta t}{5 \Delta t} = \frac{14}{5} = 2.8 \\ 160 | \text{加速比}_3 &= \frac{T_1}{T_3} = \frac{14 \Delta t}{5 \Delta t} = \frac{14}{5} = 2.8 \\ 161 | \text{加速比}_4 &= \frac{T_1}{T_4} = \frac{14 \Delta t}{5.75 \Delta t} = \frac{56}{23} \approx 2.435 162 | \end{align*} 163 | 164 | \end{document} -------------------------------------------------------------------------------- /Homework4/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{amssymb} 8 | \usepackage[colorlinks, linkcolor = black]{hyperref} 9 | \usepackage{float} 10 | \usepackage[table, xcdraw]{xcolor} 11 | \usepackage{listings} 12 | \usepackage{graphicx} 13 | \usepackage{booktabs} 14 | \lstset{ 15 | basicstyle = \ttfamily, 16 | keywordstyle = \bfseries, 17 | commentstyle = \textnormal, 18 | % linewidth = \linewidth, 19 | % xleftmargin = 0pt, 20 | % xrightmargin = 0pt, 21 | numbers = left, 22 | numberstyle = \textcircled, 23 | frame = none, 24 | escapeinside = ``, 25 | language = [x86masm]Assembler, 26 | } 27 | \usepackage{enumerate} 28 | \usepackage{enumitem} 29 | \setlist{ 30 | leftmargin = .1\linewidth, 31 | % rightmargin = .1\linewidth, 32 | % label=\emph{\alph*}. 33 | } 34 | 35 | \title{Homework 4} 36 | \author{PB17000297 罗晏宸} 37 | \date{April 20 2020} 38 | 39 | \begin{document} 40 | \maketitle 41 | 42 | \section{Exercise 3.15} 43 | 在这个练习中,我们将研究 Tomasulo 算法的各种变体在执行练习3.14中的循环\ref{3.14}时的表现。功能单元(FU)如下表所述。 44 | \begin{table}[h] 45 | \centering 46 | \begin{tabular}{lccc} 47 | \toprule 48 | 功能单元类型 & EX中的循环数 & 功能单元数 & 保留站数 \\ 49 | \midrule 50 | 整数 & 1 & 1 & 5 \\ 51 | 浮点加法器 & 10 & 1 & 3 \\ 52 | 浮点乘法器 & 15 & 1 & 2 \\ 53 | \bottomrule 54 | \end{tabular} 55 | \end{table} 56 | \begin{figure}[h] 57 | \label{3.14} 58 | \centering 59 | \begin{lstlisting}[firstnumber = 0] 60 | DADDIU R4, R1, #800 ; R4 = X 的上界 61 | foo: L.D F2, 0(R1) ; 载入 X(i) 62 | MUL.D F4, F2, F0 ; 求乘积 a `$\times$` X(i) 63 | L.D F6, 0($2) ; 载入 Y(i) 64 | ADD.D F6, F4, F6 ; 求和 a `$\times$` X(i) `$+$` Y(i) 65 | S.D 0(R2), F6 ; 存储 Y(i) 66 | DADDIU R1, R1, #8 ; 递增 X 索引 67 | DADDIU R2, R2, #8 ; 递增 Y 索引 68 | SGTIU R3, R1, R4 ; 测试是否完成 69 | BEQZ R3, foo ; 如果没有完成则继续循环 70 | \end{lstlisting} 71 | \caption{练习3.14的循环} 72 | \end{figure} 73 | 作出如下假设: 74 | \begin{enumerate}[] 75 | \item[$\blacksquare$] 功能单元未实现流水化; 76 | \item[$\blacksquare$] 功能单元之间不存在转发,结果由公共数据总线(CDB)传送; 77 | \item[$\blacksquare$] 执行级(EX)既进行有效地址计算,又进行存储器访问,以完成载入和存储指令。因此,这个流水线为 IF/ID/IS/EX/WB; 78 | \item[$\blacksquare$] 载入指令需要一个时钟周期; 79 | \item[$\blacksquare$] 发射(IS)和写回(WB)结果级各需要一个时钟周期; 80 | \item[$\blacksquare$] 共有 5 个载入缓冲区槽和 5 个存储缓冲区槽; 81 | \item[$\blacksquare$] 假定“等于/不等于 0 时转移”(BNEZ)指令需要一个时钟周期。 82 | \end{enumerate} 83 | \begin{figure}[h] 84 | \centering 85 | \includegraphics[scale = 1]{3-10.pdf} 86 | \caption{\textbf{使用 Tomasulo 算法的 MIPS 浮点单元的基本结构。指令由指令单元发送给指令队列,再按先入先出(FIFO)顺序从指令队列中发射出去。}保留站包括运算和实际操作数,还有用于检测和解决冒险的信息。载入缓冲区有 3 项功能:(1)保存有效地址的各个部分,直到计算完成;(2)跟踪正在等待存储器的未完成载入过程;(3)保存正在等待 CDB 的已完成载入过程的结果。与此类似,存储器缓冲区也有 3 项功能:(1)保存有效地址的各个部分,直到计算完成;(2)对于尚未完成、正在等待待存储数据值的存储过程,存储其目标存储器地址;(3)保存要存储的地址和数据值,直到存储器单元可用为止。来自 FP 单元或载入单元的所有结果都被放在 CDB 中,它会通向 FP 寄存器堆以及保留站和存储器缓冲区。 FP 加法器实现加法和减法, FP 乘法器完成乘法和除法} 87 | \label{3-4} 88 | \end{figure} 89 | \subparagraph{a} 对这个问题来说,使用图\ref{3-4}的单发射 Tomasulo MIPS 流水线,流水线延迟如上表所示。对于该循环的三个迭代,给出每个指令的停顿周期数以及每个指令在哪个时钟周期中开始执行(即,进入它的第一个 EX 周期)。每个循环迭代需要多少个时钟周期?以表格方式给出你的答案,表中应当具有以下列标头: 90 | \begin{enumerate}[] 91 | \item[$\blacksquare$] 迭代(循环迭代数); 92 | \item[$\blacksquare$] 指令; 93 | \item[$\blacksquare$] 发射(发射指令的周期); 94 | \item[$\blacksquare$] 执行(执行指令的周期); 95 | \item[$\blacksquare$] 存储器访问(访问存储器的周期); 96 | \item[$\blacksquare$] 写 CDB(将结果写到 CDB 的周期); 97 | \item[$\blacksquare$] 注释(对指令正在等待的事件的说明)。 98 | \end{enumerate} 99 | 在表中给出这个循环的三次迭代,可以忽略第一条指令。 100 | 101 | \paragraph{解} 102 | \subparagraph{a} 答案如表\ref{answer}所示。 103 | 104 | 105 | 第1次迭代的时钟周期数为 $31 - 1 + 1 = 31$,第2次迭代的时钟周期数为$46 – 10 + 1 = 37$,第3次迭代的时钟周期数为$61 – 19 + 1 = 43$。 106 | \begin{table}[h] 107 | \label{answer} 108 | \centering 109 | \begin{tabular}{clcccc} 110 | \toprule 111 | 迭代 & 指令 & 发射 & 执行/存储器访问 & 写 CDB & 注释 \\ 112 | \midrule 113 | 1 & \lstinline[]!L.D F2, 0(R1)! & 1 & 2 & 3 & \\ 114 | 1 & \lstinline[]!MUL.D F4, F2, F0! & 2 & 4 & 19 & 等待\texttt{F2}写回 \\ 115 | 1 & \lstinline[]!L.D F6, 0($2)! & 3 & 4 & 5 & \\ 116 | 1 & \lstinline[]!ADD.D F6, F4, F6! & 4 & 20 & 30 & 等待\texttt{F4} \\ 117 | 1 & \lstinline[]!S.D 0(R2), F6! & 5 & 31 & & 等待\texttt{F6} \\ 118 | 1 & \lstinline[]!DADDIU R1, R1, #8! & 6 & 7 & 8 & \\ 119 | 1 & \lstinline[]!DADDIU R2, R2, #8! & 7 & 8 & 9 & \\ 120 | 1 & \lstinline[]!SGTIU R3, R1, R4! & 8 & 9 & 10 & 整型指令 \\ 121 | 1 & \lstinline[]!BEQZ R3, foo! & 9 & 11 & & 等待\texttt{R3} \\ 122 | 2 & \lstinline[]!L.D F2, 0(R1)! & 10 & 12 & 13 & 等待跳转 \\ 123 | 2 & \lstinline[]!MUL.D F4, F2, F0! & 11 & 19 & 34 & 乘法器忙 \\ 124 | 2 & \lstinline[]!L.D F6, 0($2)! & 12 & 13 & 14 & \\ 125 | 2 & \lstinline[]!ADD.D F6, F4, F6! & 13 & 35 & 45 & 等待\texttt{F4} \\ 126 | 2 & \lstinline[]!S.D 0(R2), F6! & 14 & 46 & & \\ 127 | 2 & \lstinline[]!DADDIU R1, R1, #8! & 15 & 16 & 17 & \\ 128 | 2 & \lstinline[]!DADDIU R2, R2, #8! & 16 & 17 & 18 & \\ 129 | 2 & \lstinline[]!SGTIU R3, R1, R4! & 17 & 18 & 19 & \\ 130 | 2 & \lstinline[]!BEQZ R3, foo! & 18 & 20 & & 等待\texttt{R3} \\ 131 | 3 & \lstinline[]!L.D F2, 0(R1)! & 19 & 21 & 22 & \\ 132 | 3 & \lstinline[]!MUL.D F4, F2, F0! & 20 & 34 & 49 & 乘法器忙 \\ 133 | 3 & \lstinline[]!L.D F6, 0($2)! & 21 & 22 & 23 & \\ 134 | 3 & \lstinline[]!ADD.D F6, F4, F6! & 22 & 50 & 60 & 等待\texttt{F4} \\ 135 | 3 & \lstinline[]!S.D 0(R2), F6! & 23 & 61 & & 等待\texttt{F6} \\ 136 | 3 & \lstinline[]!DADDIU R1, R1, #8! & 24 & 25 & 26 & \\ 137 | 3 & \lstinline[]!DADDIU R2, R2, #8! & 25 & 26 & 27 & \\ 138 | 3 & \lstinline[]!SGTIU R3, R1, R4! & 26 & 27 & 28 & \\ 139 | 3 & \lstinline[]!BEQZ R3, foo! & 27 & 29 & & 等待\texttt{R3} \\ 140 | \bottomrule 141 | \end{tabular} 142 | \caption{以表格形式呈现的答案,其中由于EX和MEM在同一个时钟周期内完成,所以合并了两个列标头} 143 | \end{table} 144 | \end{document} -------------------------------------------------------------------------------- /Homework3/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{siunitx} 8 | \usepackage{float} 9 | \usepackage[table,xcdraw]{xcolor} 10 | \usepackage{listings} 11 | \usepackage{graphicx} 12 | \usepackage{graphics} 13 | \lstset{ 14 | basicstyle = \ttfamily, 15 | keywordstyle = \bfseries, 16 | linewidth = \linewidth, 17 | xleftmargin=.2\textwidth, 18 | xrightmargin=.2\textwidth, 19 | numbers = left, 20 | numberstyle = \textcircled, 21 | frame = none, 22 | } 23 | \sisetup{ 24 | binary-units = true 25 | } 26 | \title{Homework 3} 27 | \author{PB17000297 罗晏宸} 28 | \date{April 2 2020} 29 | 30 | \begin{document} 31 | \maketitle 32 | 33 | \section{} 34 | 考虑一个由 L1 和 L2 数据缓存组成的两级存储器层次结构,假定两个缓存在写入命中时都使用写回策略,两者的块大小相同。列出在以下事件时采取的操作。 35 | \subparagraph{a} 当缓存组织方式为包含式层次结构时,发生 L1 缓存缺失(miss) 36 | \subparagraph{b} 当缓存组织方式为互斥式层次结构时,发生 L1 缓存缺失 37 | \subparagraph{c} 在 a 部分和 b 部分中,考虑被替换的块是脏块的可能性(需要更新和不需要更新的可能性) 38 | 39 | \paragraph{解} 40 | \subparagraph{a} 41 | 当缓存组织方式为包含式层次结构时,L1 中数据总是出现在 L2 中。L1 中块缺失,可以分为以下两种情况: 42 | \begin{itemize} 43 | \item 缺失的块在 L2 中:L2 将该块 $b_0$ 提供给 L1,相应的 L1 中某块 $b_1$ 会被替代。 44 | \item 缺失的块不在 L2 中:L2 需要到内存中取,取回的块 $b_0$ 同时提供给 L1 和 L2。相应的 L1 和 L2 中有块会被替代。L2 中被替代的块 $b_1$ 如果也在 L1 中,那么 L1 中的这一块$b_1$ 需要被置为失效。 45 | \end{itemize} 46 | 47 | \subparagraph{b} 48 | 当缓存组织方式为互斥式层次结构时,L1 中数据绝不出现在 L2 中。L1 中块 $b_0$ 缺失,可以分为以下两种情况: 49 | \begin{itemize} 50 | \item 缺失的块在 L2 中:L2 将该块 $b_0$ 提供给 L1,相应的 L1 中某块 $b_1$ 会被替代。互斥式层次结构 L1 中的缓存缺失会导致 L1 和 L2 中的块互换,即 $b_1$ 和 $b_0$ 互换。 51 | \item 缺失的块不在 L2 中:L1 需要到内存中取 $b_0$,取回的块只提供给 L1。相应的 L1 有块 $b_1$ 会被替代。将 L1 被替代的块 $b_1$ 写入 L2,L2 也有块 $b_2$ 被替代。 52 | \end{itemize} 53 | 54 | \subparagraph{c} 55 | 考虑被替换的块是脏块的可能性。当缓存组织方式为包含式层次结构时,对于两种情况: 56 | \begin{itemize} 57 | \item 缺失的块在 L2 中:L2 将该块 $b_0$ 提供给 L1,相应的 L1 中某块 $b_1$ 会被替代。由于两个缓存都采取写回策略,L1中被替代的块 $b_1$ 可能是脏块,如果是脏块,将它写入 L2 对应的块 $b_1$ 58 | \item 缺失的块不在 L2 中:L2 需要到内存中取,取回的块 $b_0$ 同时提供给 L1 和 L2。相应的 L1 和 L2 中有块会被替代。L2 中被替代的块 $b_1$ 如果也在 L1 中,那么 L1 中的这一块$b_1$ 需要被置为失效。L1 中被替代的块 $b_2$ 如果是脏块,将它写入 L2 对应的块 $b_1$。 59 | \end{itemize} 60 | 61 | 当缓存组织方式为互斥式层次结构时,L1 中块 $b_0$ 缺失,对于两种情况: 62 | \begin{itemize} 63 | \item 缺失的块在 L2 中:L2 将该块 $b_0$ 提供给 L1,相应的 L1 中某块 $b_1$ 会被替代。互斥式层次结构 L1 中的缓存缺失会导致 L1 和 L2 中的块互换,即 $b_1$ 和 $b_0$ 互换。 64 | \item 缺失的块不在 L2 中:L1 需要到内存中取 $b_0$,取回的块只提供给 L1。相应的 L1 有块 $b_1$ 会被替代。将 L1 被替代的块 $b_1$ 写入 L2,L2 也有块 $b_2$ 被替代。$b_2$ 如果是脏块,需要写回内存。 65 | \end{itemize} 66 | \section{} 67 | 每当计算机空闲时,既可以将其置于待机状态(DRAM 仍然处于活动状态),也可以让他休眠。为了使其进入休眠状态,假定必须仅将 DRAM 的内容复制到永久性介质中,比如闪存中,如果将大小为 64 字节的缓存行读写至闪存需要 \SI{2.56}{\micro\joule},读写至 DRAM 需要 \SI{0.5}{\nano\joule},如果 \SI{8}{\giga\byte} DRAM 空闲功耗为 \SI{1.6}{\watt},那么一个系统空闲多长时间后才能从休眠中获益?假定主存储器的容量为 \SI{8}{\giga\byte} 68 | 69 | 70 | \paragraph{解} 71 | \begin{align*} 72 | T & = \frac{\SI{8}{\giga\byte} \times 2 \times (\SI{2.56}{\micro\joule} + \SI{0.5}{\nano\joule})}{\SI{64}{\byte} \times \SI{1.6}{\watt}} \\ 73 | & = \SI{400.078}{\second} 74 | \end{align*} 75 | 76 | 77 | \section{} 78 | 你正要采用一个具有以下特征的处理器构建系统:循序执行,运行频率为 \SI{1.1}{\giga\hertz},排除存储器访问在外的 CPI 为 1。只有载入和存储指令能从存储器读写数据,载入指令占全部指令的 20\%,存储指令占 5\%。此计算机的存储器系统包括一个分离的 L1 缓存,它在命中时不会产生任何代价。I 缓存和 D 缓存都是直接映射,分别为 \SI{32}{KB}。I 缓存的缺失率为 2\%,块大小为 32 字节,D 缓存为直写缓存,缺失率为 5\%,块大小为 16 字节。D 缓存上有一个写入缓冲区,消除了绝大多数写入操作的停顿,占总写入操作的 95\%(指 CPU 的写停顿比例)。L2 为 \SI{512}{\kilo\byte},统一 L2 的块大小为 64 字节,访问时间为 \SI{15}{\nano\second}.它由 128 位数据总线连接到 L1 缓存,运行频率为 \SI{266}{\mega\hertz},每条总线每个时间周期可以传送一个 128 位字。在发往此系统 L2 缓存的所有存储器引用中,其中 80\% 的引用无须进入主存储器就可以得到满足。另外,在被替换的所有块中,50\% 为脏块。主存储器的宽度为 128 位,访问延迟为 \SI{60}{\nano\second},在此之后,可以在这个宽 128 位,频率为 \SI{133}{\mega\hertz} 的主存储器总线上以每个周期传送一个字的速率来传送任意数目的总线字。 79 | 80 | \subparagraph{a} 指令访问的存储器平均访问时间为多少 81 | \subparagraph{b} 数据读取的存储器平均访问时间为多少 82 | \subparagraph{c} 数据写入的存储器平均访问时间为多少 83 | \subparagraph{d} 包括存储器访问在内的整体 CPI 为多少 84 | 85 | \paragraph{解} 86 | 首先计算缓存的缺失代价 87 | \begin{align*} 88 | \text{缺失代价}_{\text{L1 I-缓存}} & = \SI{15}{\nano\second} + \frac{\SI{32}{\byte}}{\SI{16}{\byte}} \times \frac{1}{\SI{266}{\mega\hertz}} \times 1000 = \SI{22.5}{\nano\second} \\ 89 | \text{缺失代价}_{\text{L1 D-缓存}} & = \SI{15}{\nano\second} + \frac{\SI{16}{\byte}}{\SI{16}{\byte}} \times \frac{1}{\SI{266}{\mega\hertz}} \times 1000 = \SI{18.75}{\nano\second} \\ 90 | \text{缺失代价}_{\text{L2 缓存}} & = \left( \SI{60}{\nano\second} + \frac{\SI{64}{\byte}}{\SI{16}{\byte}} \times \frac{1}{\SI{133}{\mega\hertz}} \times 1000 \right) \times (100\% + 50\%) \\ &= \SI{135}{\nano\second} 91 | \end{align*} 92 | \subparagraph{a} 93 | \begin{align*} 94 | \text{存储器平均访问时间}_{\text{I}} & = \text{缺失率}_{\text{L1 I-缓存}} \\ 95 | & \indent \times \left(\text{缺失代价}_{\text{L1 I-缓存}} + \text{缺失率}_{\text{L2 缓存}} \times \text{缺失代价}_{\text{L2 缓存}}\right) \\ 96 | & = 2\% \times (\SI{22.5}{\nano\second} + 20\% \times \SI{135}{\nano\second}) \\ 97 | & = \SI{0.99}{\nano\second} 98 | \end{align*} 99 | 100 | \subparagraph{b} 101 | \begin{align*} 102 | \text{存储器平均访问时间}_{\text{read}} & = \text{缺失率}_{\text{L1 D-缓存}} \\ 103 | & \indent \times (\text{缺失代价}_{\text{L1 D-缓存}} + \text{缺失率}_{\text{L2 缓存}} \times \text{缺失代价}_{\text{L2 缓存}}) \\ 104 | & = 5\% \times (\SI{18.75}{\nano\second} + 20\% \times \SI{135}{\nano\second}) \\ 105 | & = \SI{2.29}{\nano\second} 106 | \end{align*} 107 | 108 | \subparagraph{c} 109 | 如果停顿消除到 L1,则有 110 | \begin{align*} 111 | \text{存储器平均访问时间}_{\text{write}} & = \text{写停顿比例} \\ 112 | & \indent \times \left(\text{缺失代价}_{\text{L1 D-缓存}} + \text{缺失率}_{\text{L2 缓存}} \times \text{缺失代价}_{\text{L2 缓存}} \right) \\ 113 | & = (1 - 95\%) \times (\SI{18.75}{\nano\second} + 20\% \times \SI{135}{\nano\second}) \\ 114 | & = \SI{2.29}{\nano\second} 115 | \end{align*} 116 | 如果停顿消除到 L2,则有 117 | \begin{align*} 118 | \text{存储器平均访问时间}_{\text{write}} & = \text{缺失代价}_{\text{L1 D-缓存}} \\ 119 | & \indent + \text{写停顿比例} \times \text{缺失率}_{\text{L2 缓存}} \times \text{缺失代价}_{\text{L2 缓存}} \\ 120 | & = \SI{18.75}{\nano\second} + (1 - 95\%) \times (20\% \times \SI{135}{\nano\second}) \\ 121 | & = \SI{20.1}{\nano\second} 122 | \end{align*} 123 | 124 | \subparagraph{d} 125 | \begin{align*} 126 | \text{CPI}_{\text{total}} & = \text{CPI}_{\text{base}} + \text{CPI}_{\text{I}} + \text{CPI}_{\text{read}} + \text{CPI}_{\text{write}} \\ 127 | & = 1 + (\SI{0.99}{\nano\second} \times + 20\% \times \SI{2.29}{\nano\second} + 5\% \times \SI{2.29}{\nano\second}) \times \SI{1.1}{\giga\hertz} \\ 128 | & = 2.71875 129 | \end{align*} 130 | \end{document} -------------------------------------------------------------------------------- /Homework2/PB17000297_罗晏宸.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[UTF8]{ctex} 3 | \usepackage[T1]{fontenc} 4 | \usepackage[utf8]{inputenc} 5 | \usepackage{latexsym} 6 | \usepackage{amsmath} 7 | \usepackage{siunitx} 8 | \usepackage{float} 9 | \usepackage[table,xcdraw]{xcolor} 10 | \usepackage{listings} 11 | \usepackage{graphicx} 12 | \usepackage{graphics} 13 | \lstset{ 14 | basicstyle = \ttfamily, 15 | keywordstyle = \bfseries, 16 | linewidth = \linewidth, 17 | xleftmargin=.2\textwidth, 18 | xrightmargin=.2\textwidth, 19 | numbers = left, 20 | numberstyle = \textcircled, 21 | frame = none, 22 | } 23 | \title{Homework 2} 24 | \author{PB17000297 罗晏宸} 25 | \date{March 20 2020} 26 | 27 | \begin{document} 28 | \maketitle 29 | 30 | \section{} 31 | 使用以下代码段(假定 R3 的初值为 R2+396): 32 | 33 | \begin{lstlisting}[language={[x86masm]Assembler}] 34 | Loop: LD R1, 0(R2); 35 | DADDI R1, R1, #1; 36 | SD R1, 0, (R2); 37 | DADDI R2, R2, #4; 38 | DSUB R4, R3, R2; 39 | BNEZ R4, Loop; 40 | \end{lstlisting} 41 | \subparagraph{a} 列出上述代码中的所有数据相关,需写出数据相关类型,并记录寄存器,源指令和目标指令。例如,从指令\textcircled{1}到指令\textcircled{2}存在对于寄存器 R1 的 RAW 相关。 42 | \subparagraph{b} 给出这一指令序列对于 5 级 RISC 流水线的时序,该流水线没有设置任何旁路定向路径(Bypass or Forwarding),但假定在同一时钟周期中的寄存器读取与写入通过该寄存器堆进行“转发”,且分支是通过冲刷流水线来处理的。如果所有存储器引用耗时一个周期,这一循环的执行需要多少个周期? 43 | \subparagraph{c} 给出这一指令序列对于拥有完整旁路定向路径的 5 级 RISC 流水线的时序。如果所有存储器引用耗时一个周期,且在处理分支时采用预测转移失败策略,这一循环的执行需要多少个周期? 44 | \subparagraph{d} 给出这一指令序列对于拥有完整旁路定向路径的 5 级 RISC 流水线的时序。如果所有存储器引用耗时一个周期,且在处理分支时采用预测转移成功策略,这一循环的执行需要多少个周期? 45 | 46 | \paragraph{解} 47 | \subparagraph{a} 48 | \begin{itemize} 49 | \item 从指令\textcircled{1}到指令\textcircled{2}存在对于寄存器 R1 的 RAW 相关。 50 | \item 从指令\textcircled{1}到指令\textcircled{2}存在对于寄存器 R1 的 WAW 相关。 51 | \item 从指令\textcircled{1}到指令\textcircled{3}存在对于寄存器 R1 的 RAW 相关。 52 | \item 从指令\textcircled{2}到指令\textcircled{3}存在对于寄存器 R1 的 WAW 相关。 53 | \item 从指令\textcircled{3}到指令\textcircled{4}存在对于寄存器 R1 的 WAR 相关。 54 | \item 从指令\textcircled{3}到指令\textcircled{4}存在对于寄存器 R2 的 WAR 相关。 55 | \item 从指令\textcircled{4}到指令\textcircled{5}存在对于寄存器 R2 的 RAW 相关。 56 | \item 从指令\textcircled{5}到指令\textcircled{6}存在对于寄存器 R4 的 RAW 相关。 57 | \end{itemize} 58 | 59 | \subparagraph{b} 60 | R3初值为R2+396,每次循环都给R2加4,直到R2=R3时终止循环。一共要$396 \div 4 = 99$个周期。 61 | 根据题意,要解决所有的数据相关,需要在指令3,4,5,6的IF段后加入两个stall,停止两个周期来保证解决数据相关。时序为: 62 | 63 | \begin{table}[H] 64 | \centering 65 | \resizebox{\columnwidth}{!}{ 66 | \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} 67 | \hline 68 | & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 \\ \hline 69 | \texttt{Loop:~~~~LD R1, 0(R2); } & IF & ID & EX & M & WB & & & & & & & & & & & & & & \\ \hline 70 | \texttt{~~~~~~~~DADDI R1, R1, \#1; } & & IF & ID & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & EX & M & WB & & & & & & & & & & & \\ \hline 71 | \texttt{~~~~~~~~SD R1, 0, (R2); } & & & IF & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & ID & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & EX & M & WB & & & & & & & & \\ \hline 72 | \texttt{~~~~~~~~DADDI R2, R2, \#4; } & & & & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & IF & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & ID & EX & M & WB & & & & & & & \\ \hline 73 | \texttt{~~~~~~~~DSUB R4, R3, R2; } & & & & & & & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & IF & ID & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & EX & M & WB & & & & \\ \hline 74 | \texttt{~~~~~~~~BNEZ R4, Loop; } & & & & & & & & & & IF & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & ID & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & EX & M & WB & \\ \hline 75 | & & & & & & & & & & & & & IF & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & {\color[HTML]{CB0000} S} & IF & \\ \hline 76 | \end{tabular} 77 | } 78 | \end{table} 79 | 循环需要17个时钟周期,因此总共的时钟周期数为 80 | $$ 81 | (99 - 1) \times 17 + (17 + 1) = 1684 82 | $$ 83 | \subparagraph{c} 84 | 在有完整旁路时,使用预测转移失败策略,需要在BNEZ指令之后冲刷流水线,时序为: 85 | 86 | \begin{table}[H] 87 | \centering 88 | \resizebox{\columnwidth}{!}{ 89 | \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|} 90 | \hline 91 | & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 \\ \hline 92 | \texttt{Loop:~~~LD R1, 0(R2);} & IF & ID & EX & M & WB & & & & & & & \\ \hline 93 | \texttt{~~~~~~~~DADDI R1, R1, \#1;} & & IF & ID & {\color[HTML]{CB0000} S} & EX & M & WB & & & & & \\ \hline 94 | \texttt{~~~~~~~~SD R1, 0, (R2);} & & & IF & {\color[HTML]{CB0000} S} & ID & EX & M & WB & & & & \\ \hline 95 | \texttt{~~~~~~~~DADDI R2, R2, \#4;} & & & & {\color[HTML]{CB0000} S} & IF & ID & EX & M & WB & & & \\ \hline 96 | \texttt{~~~~~~~~DSUB R4, R3, R2;} & & & & & & IF & ID & EX & M & WB & {\color[HTML]{CB0000} } & {\color[HTML]{CB0000} } \\ \hline 97 | \texttt{~~~~~~~~BNEZ R4, Loop;} & & & & & & & IF & ID & EX & M & WB & {\color[HTML]{CB0000} } \\ \hline 98 | \texttt{~~~~~~~~LW R1, 0(R2);} & & & & & & & & IF & {\color[HTML]{CB0000} Miss} & {\color[HTML]{CB0000} Miss} & IF & \\ \hline 99 | \end{tabular} 100 | } 101 | \end{table} 102 | 循环需要10个时钟周期,因此总共的时钟周期数为 103 | $$ 104 | (99 - 1) \times 9 + (9 + 1) = 991 105 | $$ 106 | 107 | \subparagraph{d} 108 | 在有完整旁路时,使用预测转移成功策略,不进行冲刷,时序为: 109 | 110 | \begin{table}[H] 111 | \centering 112 | \resizebox{\columnwidth}{!}{ 113 | \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|c|} 114 | \hline 115 | & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 \\ \hline 116 | \texttt{Loop:~~~LD R1, 0(R2);} & IF & ID & EX & M & WB & & & & & & & & \\ \hline 117 | \texttt{~~~~~~~~DADDI R1, R1, \#1;} & & IF & ID & {\color[HTML]{CB0000} S} & EX & M & WB & & & & & & \\ \hline 118 | \texttt{~~~~~~~~SD R1, 0, (R2);} & & & IF & {\color[HTML]{CB0000} S} & ID & EX & M & WB & & & & & \\ \hline 119 | \texttt{~~~~~~~~DADDI R2, R2, \#4;} & & & & {\color[HTML]{CB0000} S} & IF & ID & EX & M & WB & & & & \\ \hline 120 | \texttt{~~~~~~~~DSUB R4, R3, R2;} & & & & & & IF & ID & EX & M & WB & {\color[HTML]{CB0000} } & {\color[HTML]{CB0000} } & \\ \hline 121 | \texttt{~~~~~~~~BNEZ R4, Loop;} & & & & & & & IF & {\color[HTML]{CB0000} S} & ID & EX & M & WB & \\ \hline 122 | & & & & & & & & & IF & ID & EX & M & \\ \hline 123 | \end{tabular} 124 | } 125 | \end{table} 126 | 循环需要9个时钟周期,因此总共的时钟周期数为 127 | $$ 128 | (99 - 1) \times 8 + 12 = 796 129 | $$ 130 | 131 | \section{} 132 | 有一条静态多功能流水线由 5 段组成,加法用 1,3,4,5 段,乘法用 1,2,5 段,第三段的时间为$2\Delta t$ ,其余各段时间均为$\Delta t$ ,而且流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中。现要在该流水线上计算$\displaystyle \prod_{i = 1}^4(A_i + B_i)$,画出其时空图,并计算其吞吐率、加速比和效率。 133 | \begin{figure}[H] 134 | \centering 135 | \includegraphics[width = 270pt]{2.jpg} 136 | \end{figure} 137 | 138 | \paragraph{解} 139 | 首先计算四次加法$A_i + B_i$,再计算两次乘法$(A_i + B_i) \times (A_{i + 1} + B_{i + 1})$,再对结果做一次乘法,时空图如下: 140 | 141 | \begin{table}[H] 142 | \centering 143 | \resizebox{\columnwidth}{!}{ 144 | \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} 145 | \hline 146 | 5 & & & & & \cellcolor[HTML]{FD6864} & & \cellcolor[HTML]{FE0000} & & \cellcolor[HTML]{CB0000} & & \cellcolor[HTML]{9A0000} & & & \cellcolor[HTML]{3166FF} & \cellcolor[HTML]{3531FF} & & & \cellcolor[HTML]{00009B} & \\ \hline 147 | 4 & & & & \cellcolor[HTML]{FD6864} & & \cellcolor[HTML]{FE0000} & & \cellcolor[HTML]{CB0000} & & \cellcolor[HTML]{9A0000} & & & & & & & & & \\ \hline 148 | 3 & & \cellcolor[HTML]{FD6864} & \cellcolor[HTML]{FD6864} & \cellcolor[HTML]{FE0000} & \cellcolor[HTML]{FE0000} & \cellcolor[HTML]{CB0000} & \cellcolor[HTML]{CB0000} & \cellcolor[HTML]{9A0000} & \cellcolor[HTML]{9A0000} & & & & & & & & & & \\ \hline 149 | 2 & & & & & & & & & & & & & \cellcolor[HTML]{3166FF} & \cellcolor[HTML]{3531FF} & & & \cellcolor[HTML]{00009B} & & \\ \hline 150 | 1 & \cellcolor[HTML]{FD6864} & & \cellcolor[HTML]{FE0000} & & \cellcolor[HTML]{CB0000} & & \cellcolor[HTML]{9A0000} & & & & & \cellcolor[HTML]{3166FF} & \cellcolor[HTML]{3531FF} & & & \cellcolor[HTML]{00009B} & & & \\ \hline 151 | & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 \\ \hline 152 | \end{tabular} 153 | } 154 | \end{table} 155 | 在$18\Delta t$的时间中,得到7个结果,吞吐率为 156 | \begin{equation*} 157 | \text{TP} = \frac{7}{18\Delta t} 158 | \end{equation*} 159 | 160 | 加速比为: 161 | \begin{equation*} 162 | \text{S} = \frac{5 \times 4\Delta t + 3 \times 3 \Delta t}{18 \Delta t} = \frac{29}{18} \approx 1.611 163 | \end{equation*} 164 | 165 | 效率为: 166 | \begin{equation*} 167 | \text{E} = \frac{5 \times 4\Delta t + 3 \times 3\Delta t}{5 \times 18\Delta t} = \frac{29}{90} \approx 0.322 168 | \end{equation*} 169 | 170 | 171 | \section{} 172 | 假定原机器是一个 5 级流水线,其时钟周期为 \SI{1}{\nano\second}。第二种机器为 12 级流水线,时钟周期为 \SI{0.6}{\nano\second}。由于数据相关,5 级流水线每 5 条指令经历一次 stall,而 12 级流水线每 8 条指令经历三次 stall。此外,分支占全部指令的 20\%,两台机器的预测错误率都是 5\%。 173 | \subparagraph{a} 仅考虑数据相关,12 级流水线相对于 5 级流水线的加速比为多少? 174 | \subparagraph{b} 在考虑分支预测错误而导致 stall 的情况下,如果第一台机器的分支预测错误的额外代价为 2 个周期,而第二台机器为 5 个周期,则每种机器的 CPI 为多少? 175 | 176 | \paragraph{解} 177 | \subparagraph{a} 178 | 仅考虑数据相关,加速比为: 179 | \begin{equation*} 180 | \text{S} = \frac{\frac{8 \times 12 + 3}{8} \times 0.6}{\frac{5 \times 5 + 1}{5} \times 1} = \frac{297}{208} \approx 1.428 181 | \end{equation*} 182 | 183 | \subparagraph{b} 184 | 第一台机器: 185 | \begin{equation*} 186 | \text{CPI} = 5 + \frac{1}{5} + 2 \times 0.2 \times 0.05 = 5.22 187 | \end{equation*} 188 | 189 | 第二台机器: 190 | \begin{equation*} 191 | \text{CPI} = 12 + \frac{3}{8} + 2 \times 0.2 \times 0.05 = 12.395 192 | \end{equation*} 193 | \end{document} --------------------------------------------------------------------------------