北京大學(xué) 計(jì)算機(jī)系統(tǒng)導(dǎo)論-期中-20131112-帶答案_第1頁(yè)
北京大學(xué) 計(jì)算機(jī)系統(tǒng)導(dǎo)論-期中-20131112-帶答案_第2頁(yè)
北京大學(xué) 計(jì)算機(jī)系統(tǒng)導(dǎo)論-期中-20131112-帶答案_第3頁(yè)
北京大學(xué) 計(jì)算機(jī)系統(tǒng)導(dǎo)論-期中-20131112-帶答案_第4頁(yè)
北京大學(xué) 計(jì)算機(jī)系統(tǒng)導(dǎo)論-期中-20131112-帶答案_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 第一題 選擇題(每小題 2 分,共 34 分) (每小題有一個(gè)或多個(gè)正確答案) (ch2, kaigui) 1、變量 x 的值為 0 x01234567,地址 unsigned y = 0 x00000001; int z = 0 x80000001; 以下表達(dá)式正確的是() A. (-x) y C. (z3) = (z*8) D. y*24= z5 - z1.10 2 (ch3, yingfei) 4、在完成 Bomb Lab 的時(shí)候, 通常先執(zhí)行 gdb bomb 啟動(dòng)調(diào)試, 然后執(zhí)行 _explode_bomb 命令以防引爆炸彈,之后在進(jìn)行其他必要的設(shè)置后,最后執(zhí)行_命令以便開(kāi)始執(zhí)行

2、程序。 上述兩個(gè)空格對(duì)應(yīng)的命令是() A. st, ruB. br, goC. br, ruD. st, go 答案:c 說(shuō)明:根據(jù)之前的討論,出一道題目檢查同學(xué)們是否自己做過(guò) lab (ch3, yingfei) 5、已知函數(shù) int x( int n ) returnn*_; 對(duì)應(yīng)的匯編代碼如下: lea (%rdi, %rdi, 4), %rdi lea (%rdi, %rdi, 1), %eax retq 請(qǐng)問(wèn)橫線上的數(shù)字應(yīng)該是() A. 4B. 5C. 2D. 10 答案:D 說(shuō)明:此題目考察對(duì)于乘法的轉(zhuǎn)換,難度較低,適合出選擇題。還可以把乘法換成除法, 就 可以出大題或者簡(jiǎn)答題。

3、(ch3, Guangyu) 6、32 位 x86 計(jì)算機(jī)、Windows 操作系統(tǒng)下定義的一個(gè) structure S 包含三個(gè)部分: double a, int b, char c, 請(qǐng)問(wèn) S 在內(nèi)存空間中最多和最少分別能占據(jù)多少個(gè)字節(jié)(32 位 Windows 系統(tǒng) 按 1、4、8 的原則對(duì)齊 char、int、double) ?答: () A. 16, 13 B. 16, 16 C. 24, 13 D. 24, 16 答案:D 考慮對(duì)齊,windows double 按 8 字節(jié)對(duì)齊,最長(zhǎng) c, a, b,最短 a,b,c (ch3, Guangyu) 7、x86 體系結(jié)構(gòu)的內(nèi)存尋址方

4、式有多種格式,請(qǐng)問(wèn)下列哪些指令是正確的: () A. movl$34,(%eax) B. movl(%eax),%eax C. movl$23,10(%edx, %eax) D. movl(%eax),8(%ebx) 答案:ABC,尋址不支持內(nèi)存到內(nèi)存的訪問(wèn) (ch3, Guangyu) 8、 x86 體系結(jié)構(gòu)中,下面哪些選項(xiàng)是錯(cuò)誤的?答: () A. leal 指令只能夠用來(lái)計(jì)算內(nèi)存地址 B. x86_64 機(jī)器可以使用棧來(lái)給函數(shù)傳遞參數(shù) C. 在一個(gè)函數(shù)內(nèi),改變?nèi)我患拇嫫鞯闹抵氨仨毾葘⑵湓紨?shù)據(jù)保存在棧內(nèi) D. 判斷兩個(gè)寄存器中值大小關(guān)系,只需要 SF(符號(hào))和 ZF(零)兩個(gè) cond

5、itional code 答案:ACD 3 (ch4, Jiangfang) 9、下面對(duì) RISC 和 CISC 的描述中,錯(cuò)誤的是: () A. CISC 指令系統(tǒng)中的指令數(shù)目較多,有些指令的執(zhí)行周期很長(zhǎng);而 RISC 指令系統(tǒng)中 通常指令數(shù)目較少,指令的執(zhí)行周期都較短。 B. CISC 指令系統(tǒng)中的指令編碼長(zhǎng)度不固定;RISC 指令系統(tǒng)中的指令編碼長(zhǎng)度固定, 這樣使得 RISC 機(jī)器可以獲得了更短的代碼長(zhǎng)度。 C. CISC 指令系統(tǒng)支持多種尋址方式,RISC 指令系統(tǒng)支持的尋址方式較少。 D. CISC 機(jī)器中的寄存器數(shù)目較少,函數(shù)參數(shù)必須通過(guò)棧來(lái)進(jìn)行傳遞;RISC 機(jī)器中的 寄存器數(shù)目

6、較多,可以通過(guò)寄存器來(lái)傳遞參數(shù),避免了不必要的存儲(chǔ)訪問(wèn)。 答案:BD (ch4, Jiangfang) 10、下面對(duì)流水線技術(shù)的描述,正確的是: () A. 流水線技術(shù)不僅能夠提高執(zhí)行指令的吞吐率,還能減少單條指令的執(zhí)行時(shí)間。 B. 不斷加深流水線級(jí)數(shù),總能獲得性能上的提升。 C. 流水級(jí)劃分應(yīng)盡量均衡,吞吐率會(huì)受到最慢的流水級(jí)影響。 D. 指令間的數(shù)據(jù)相關(guān)可能會(huì)引發(fā)數(shù)據(jù)冒險(xiǎn),可以通過(guò)數(shù)據(jù)轉(zhuǎn)發(fā)或暫停流水線來(lái)解決。 答案:CD (ch4, Junlin) (11-13)、在教材所描述的流水線處理器(the PIPE processor)上分別運(yùn)行如下四段Y86 程序代碼。請(qǐng)分析其中數(shù)據(jù)冒險(xiǎn)的具體

7、情況,并回答后續(xù)3個(gè)小題。 #Program 1: mrmovl8(%ebx), %edx rmmovl%edx, 16(%ecx) #Program 2: mrmovl8(%ebx), %edx nop rmmovl%edx, 16(%ecx) #Program 3: mrmovl8(%ebx), %edx nop nop rmmovl%edx, 16(%ecx) #Program 4: mrmovl8(%ebx), %edx nop nop nop rmmovl%edx, 16(%ecx) 11、對(duì)于每段程序,請(qǐng)指出是否會(huì)因?yàn)閿?shù)據(jù)冒險(xiǎn)導(dǎo)致流水線停頓(Stall)。 Program 1:()

8、,Program 2:(),Program 3:(),Program 4:(); A. StallB. No-Stall 答案: A, B, B, B 12、對(duì)于每段程序,請(qǐng)指出流水線處理器內(nèi)是否會(huì)產(chǎn)生數(shù)據(jù)轉(zhuǎn)發(fā)(Forwarding)。 Program 1:(),Program 2:(),Program 3:(),Program 4:(); A. ForwardingB. No-Forwarding 答案: A,A,A,B 13、對(duì)于每段程序,請(qǐng)指出流水線處理器內(nèi)使用哪個(gè)信號(hào)進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),如果不進(jìn)行數(shù) 4 據(jù)轉(zhuǎn)發(fā),則用none表示。 Program 1:(),Program 2:(),Prog

9、ram 3:(),Program 4:(); A. m_valMB. W_valMC. none 答案: A,A,B,C (ch5, Guangyu) 14、下面哪些選項(xiàng)是錯(cuò)誤的?答: () A. 同一個(gè)任務(wù)采用時(shí)間復(fù)雜度為 O(logN)算法一定比采用復(fù)雜度為 O(N)算法的執(zhí)行時(shí)間短 B. 編譯器進(jìn)行程序優(yōu)化時(shí),總是可以使用算數(shù)結(jié)合律來(lái)減少計(jì)算量 C. 增大循環(huán)展開(kāi)(loop unrolling)的級(jí)數(shù),有可能降低程序的執(zhí)行性能(即增加執(zhí)行時(shí)間) D. 分支預(yù)測(cè)時(shí),“總是預(yù)測(cè)不跳轉(zhuǎn)”(branch not taken) 一定比 “總是預(yù)測(cè)跳轉(zhuǎn)”(branch taken) 預(yù)測(cè)準(zhǔn)確率高 答

10、案:ABD (ch5, Guangyu) 15、以下哪些程序優(yōu)化編譯器總是可以自動(dòng)進(jìn)行?(假設(shè) int i, int j, int AN, int BN, int m 都是局部變量,N 是一個(gè)整數(shù)型常量,int foo(int) 是一個(gè)函數(shù))答: () 優(yōu)化前優(yōu)化后 A.for (j = 0 ; j N ; j +) m + = i*N*j; int temp = i*N; for (j= 0 ; j N ; j +) m + = temp * j; B.for (j = 0 ; j N ; j +) Bi *= Aj; int temp = Bi; for (j= 0 ; j N ; j +

11、) temp *= Aj; Bi = temp; C.for (j = 0 ; j N ; j +) m = (m +Aj) + Bj; for (j = 0 ; j N ; j +) m = m + (Aj + Bj); D.for (j = 0 ; j foo(N) ; j +) m +; int temp = foo(N); for (j= 0 ; j temp ; j +) m +; 答案:AC (ch6 Xuetao) 16、如果直接映射高速緩存大小是 4KB,并且塊(block)大小為 32 字節(jié),請(qǐng)問(wèn)它每組(set) 有多少行(line) ?答: () A. 128B. 64C.

12、 32D. 1 答案:D (ch6 Xuetao) 17、關(guān)于局部性(locality)的描述,不正確的是: () A. 數(shù)組通常具有很好的時(shí)間局部性 B. 數(shù)組通常具有很好的空間局部性 C. 循環(huán)通常具有很好的時(shí)間局部性 D. 循環(huán)通常具有很好的空間局部性 答案:A 5 (ch2, kaigui) 第二題(8 分) 1)判斷下表中每一行表達(dá)式對(duì)或錯(cuò)。如果錯(cuò),請(qǐng)舉出反例或簡(jiǎn)要說(shuō)明原因(每行 1 分) int x, y; unsigned u, v; True or false原因或舉出反例 if x0, then x*2 -v 答案 True or false原因或舉出反例 if x0, th

13、en x*2 -vFU=2, v=1 2)請(qǐng)按 IEEE 浮點(diǎn)標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)表示下表中的數(shù)值,首先寫(xiě)出形如(-1)sM2E的 表達(dá)式,然后給出十六進(jìn)制的表示。 (每格 1 分) 注:?jiǎn)尉雀↑c(diǎn)數(shù)的字段劃分如下: 符號(hào)位(s) :1-bit;階碼字段(exp) :8-bit;小數(shù)字段(frac) :23-bit;偏置值(bias) :127。 Value(-1)sM2E,1=M2Hex representation 2-149 答案 Value(-1)sx M x 2E 1=M2 Hex representation (-1)x 1.1 x 200 xBFC00000 2-1491.0 x

14、2-1490 x00000001 6 (ch3 Xuetao) 第三題 (11 分) 閱讀下面的 C 代碼: /* * Copyright (C) 2013 Davidlohr Bueso * *Based on the shift-and-subtract algorithm for computing integer *square root from Guy L. Steele. */ /* * int_sqrt - rough approximation to sqrt * x: integer of which to calculate the sqrt * * Avery roug

15、h approximation to the sqrt() function. */ unsigned long int_sqrt(unsigned long x) unsigned long b, m, y = 0; if (x = 1) return x; m = 1UL = 1; if (x = b) x -= b; y += m; m = 2; return y; 1)在 64 位的機(jī)器上 BITS_PER_LONG 的定義為 long 類型的二進(jìn)制位數(shù),它是多少位? 2)填寫(xiě)下面反匯編中的缺失的內(nèi)容: : 4004c4:push%rbp 4004c5:mov%rsp,%rbp 400

16、4c8:mov%rdi,-0 x28(%rbp) 4004cc:movq(1),-0 x8(%rbp) 4004d4:cmpq$0 x1,-0 x28(%rbp) 4004d9:ja(2) 4004db:mov-0 x28(%rbp),%rax 4004df:jmp(3) 4004e1:movl$0 x0,-0 x10(%rbp) 4004e8:movl(4),-0 xc(%rbp) 4004ef:jmp(5) 4004f1:mov-0 x10(%rbp),%rax 7 4004f5:mov-0 x8(%rbp),%rdx 4004f9:lea(6),%rax 4004fd:mov%rax,-

17、0 x18(%rbp) 400501:shrq-0 x8(%rbp) 400505:mov-0 x28(%rbp),%rax 400509:cmp-0 x18(%rbp),%rax 40050d:jb(7) 40050f:mov-0 x18(%rbp),%rax 400513:sub%rax,-0 x28(%rbp) 400517:mov-0 x10(%rbp),%rax 40051b:add%rax,-0 x8(%rbp) 40051f:shrq(8),-0 x10(%rbp) 400524:cmpq$0 x0,-0 x10(%rbp) 400529:jne(9) 40052b:mov-0

18、x8(%rbp),(10) 40052f:leaveq 400530:retq 答案: 1、 答:64 2、 : 4004c4:push%rbp 4004c5:mov%rsp,%rbp 4004c8:mov%rdi,-0 x28(%rbp) 4004cc:movq$0 x0,-0 x8(%rbp) 4004d4:cmpq$0 x1,-0 x28(%rbp) 4004d9:ja4004e1 4004db:mov-0 x28(%rbp),%rax 4004df:jmp40052f 4004e1:movl$0 x0,-0 x10(%rbp) 4004e8:movl$0 x40000000,-0 xc

19、(%rbp) 4004ef:jmp400524 4004f1:mov-0 x10(%rbp),%rax 4004f5:mov-0 x8(%rbp),%rdx 4004f9:lea(%rdx,%rax,1),%rax 4004fd:mov%rax,-0 x18(%rbp) 400501:shrq-0 x8(%rbp) 400505:mov-0 x28(%rbp),%rax 400509:cmp-0 x18(%rbp),%rax 40050d:jb40051f 40050f:mov-0 x18(%rbp),%rax 400513:sub%rax,-0 x28(%rbp) 400517:mov-0

20、x10(%rbp),%rax 40051b:add%rax,-0 x8(%rbp) 40051f:shrq$0 x2,-0 x10(%rbp) 400524:cmpq$0 x0,-0 x10(%rbp) 400529:jne4004f1 40052b:mov-0 x8(%rbp),%rax 40052f:leaveq 400530:retq 8 (ch3 Xuetao) 第四題(10 分) 閱讀下面的匯編代碼: : 4004c4:push%rbp 4004c5:mov%rsp,%rbp 4004c8:sub$0 x10,%rsp 4004cc:mov%edi,-0 x4(%rbp) 4004c

21、f:cmpl$0 x1,-0 x4(%rbp) 4004d3:ja4004dc 4004d5:mov$0 x1,%eax 4004da:jmp40052d 4004dc:mov-0 x4(%rbp),%eax 4004df:and$0 x1,%eax 4004e2:test%eax,%eax 4004e4:jne4004f5 4004e6:mov0 x200440(%rip),%eax# 60092c 4004ec:add$0 x1,%eax 4004ef:mov%eax,0 x200437(%rip)# 60092c 4004f5:mov-0 x4(%rbp),%eax 4004f8:and

22、$0 x1,%eax 4004fb:test%al,%al 4004fd:je40050e 4004ff:mov0 x20042b(%rip),%eax# 600930 400505:add$0 x1,%eax 400508:mov%eax,0 x200422(%rip)# 600930 40050e:mov-0 x4(%rbp),%eax 400511:sub$0 x1,%eax 400514:mov%eax,%edi 400516:callq4004c4 40051b:mov0 x20040f(%rip),%edx# 600930 400521:lea(%rax,%rdx,1),%edx

23、400524:mov0 x200402(%rip),%eax# 60092c 40052a:lea(%rdx,%rax,1),%eax 40052d:leaveq 40052e:retq 1)程序 main() unsigned int n; for (n=1; n 4; n+) printf(f(%d) = %xn, n, f(n); 的運(yùn)行結(jié)果為:f(1)=1,f(2)=4e,f(3)=9f,請(qǐng)?zhí)顚?xiě) f 函數(shù)所需要的內(nèi)容(每空 1 分) : #define N(1) #define M(2) struct P1 char cN; char *dN; char eN; P1; struct

24、P2 int iM; char jM; short kM; P2; unsigned int f(unsigned int n) (3)unsigned int x = sizeof(P1); (4)unsigned int y = sizeof(P2); 9 if (5) return 1; if (6) x+; if (7) y+; return(8); 2、程序 main() printf(%x, %xn, f(2), f(2); 的運(yùn)行結(jié)果為:(2 分) 1、答案: #define N3 #define M5 struct P1 char cN; char *dN; char eN;

25、P1; struct P2 int iM; char jM; short kM; P2; unsigned int f(unsigned int n) static unsigned int x = sizeof(P1); static unsigned int y = sizeof(P2); if (n=1) return 1; if (n if (n return f(n-1) + (y) +(x); 2、答案:4f, 4e(回答 4e, 4f 給一半的分) 10 (ch4 Jiangfang) 第五題(9 分) 在“取指-譯碼-執(zhí)行-寫(xiě)回”的四級(jí)流水線中,各流水級(jí)的工作內(nèi)容和延遲如上圖所

26、示,寄存器的延遲 也已標(biāo)出。數(shù)據(jù)和指令分別存放在不同的存儲(chǔ)器中。Cycle N 寫(xiě)入寄存器文件的數(shù)據(jù) Cycle N+1 才可讀出。 請(qǐng)問(wèn): 1)若不考慮流水線填充和清空時(shí)間,請(qǐng)計(jì)算該處理器的吞吐率。 (1 分) 2)若將該處理器改造為單周期處理器(SEQ) ,請(qǐng)計(jì)算 SEQ 處理器的吞吐率。 (1 分) 3)在上述流水線中,執(zhí)行階段包含了訪問(wèn)數(shù)據(jù)存儲(chǔ)的時(shí)間。對(duì)于如下的 Y86 程序段,指令間存在哪些數(shù) 據(jù)相關(guān)(dependence) ,會(huì)引起哪些數(shù)據(jù)冒險(xiǎn)(hazard) ?(5 分) Prog: irmovl$128, %edx#instr1 irmovl$3, %ecx#instr2 rm

27、movl%ecx, 0(%edx)#instr3 irmovl$10, %ebx#instr4 mrmovl0(%edx), %eax#instr5 addl%ebx, %eax#instr6 4)以上的數(shù)據(jù)冒險(xiǎn),可以通過(guò)轉(zhuǎn)發(fā)(forward)的方法解決。請(qǐng)結(jié)合上述程序代碼和流水線結(jié)構(gòu)圖逐個(gè)說(shuō) 明解決方案。 (2 分) 答案: 1)1000/(280 + 20) = 1000/300 = 3.33GIPS 2)1000/(80 +60 +280 + 60 +20) = 1000/ 500 = 2 GIPS 3) Prog: irmovl$128, %edx; 1、dx= 128 irmovl$

28、3, %ecx; 2、cx= 3 rmmovl%ecx, 0(%edx); 3、dx = cx irmovl$10, %ebx; 4、bx= 10 mrmovl0(%edx), %eax; 5、ax= dx addl%ebx, %eax; 6、bx = bx + ax 相關(guān):1-3,2-3, 1-5,4-6,5-6 冒險(xiǎn):1-3,2-3,4-6,5-6 4)2-3,5-6:執(zhí)行到譯碼的轉(zhuǎn)發(fā)通路解決;1-3,4-6:寫(xiě)回到譯碼的轉(zhuǎn)發(fā)通路解決。 11 (ch4, Junlin) 第六題(9 分) 請(qǐng)分析Y86 ISA中定義的兩條指令(cmovXX、call)和一條新加入Y86 ISA的IA32 指

29、令(decl:將操作數(shù)減1)。若在教材所描述的SEQ處理器上執(zhí)行這些指令,請(qǐng)按下表 填寫(xiě)每個(gè)階段進(jìn)行的操作。如果在某一階段沒(méi)有任何操作,請(qǐng)?zhí)顚?xiě)none指明。 注1、所用到的指令編碼為: cmovXXrA, rB2fnrArB callDest80Dest declrAC0rAF 注2、需說(shuō)明的信號(hào)包括:icode, ifun, rA, rB, valA, valB, valC, valE, valP;the register file R, data memory M, Program counter PC, condition codes CC。 (每格0.5分) StagecmovXXrA

30、, rBcallDestdeclrA Fetchicode:ifun M1PC rA:rB M1PC+1 valP PC+2 icode:ifun M1PC valC M4PC+1 valP PC+5 icode:ifun M1PC rA:rB M1PC+1 valP PC+2 DecodevalA RrA valB R%esp valA RrA ExecutevalE 0+valA Cnd Cond(CC,ifun) (也可以寫(xiě)Set CC) valE valB+(-4)valE valA+(-1) Cnd Cond(CC,ifun) (也可以寫(xiě)Set CC) MemorynoneM4val

31、E valPnone Write back if(Cnd) RrB valER%esp valERrA valE PC update PC valPPC valCPC valP 12 (ch5, yingfei) 第七題(10 分) 已知如下的匯編程序?qū)崿F(xiàn)了函數(shù) transform(char* src, char* tgt, char delta) transform: jmp L2 L1: add %edx, %eax add $1, $rdi mov %al, (%rsi) add $1, $rsi L2: movzbl (%rdi), %eax test %al, %al jne L1 movb $0, (%rsi) retq 參考信息:64 位指令集中傳遞前三個(gè)參數(shù)分別使用寄存器%rdi, %rsi 和%rdx 1)寫(xiě)出 transform 函數(shù)對(duì)應(yīng)的 C 語(yǔ)言版本(2 分) 2)假設(shè)讀寫(xiě)訪存指令延遲為 20 個(gè)時(shí)鐘周期,其他指令延遲為 2 個(gè)時(shí)鐘周期,所有分支預(yù)測(cè)都成功。同時(shí) C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論