- 博客(100)
- 收藏
- 关注

原创 立博宣言
《深入理解计算机系统》是计算机行业内公认的经典名著。本人准备细读此书,却发现本书大量的家庭作业没有答案。想了很多办法没能找到第二版的solution book。于是决定立此博客,将自己的答案记录并发布出来。如果错了,欢迎高人指正(82642225@qq.com)。如果对了,也可以给后来人指路。
2013-04-19 12:44:49
4802
1
原创 csapp2e 家庭作业 6.47
void col_convert(int *G,int dim){ int i,j; int im,jm; for(i=0;i { im = i*dim; for(j=0;j { jm = j*dim; G[jm+i]|=G[jm+i]||G[im+j]; G[jm+i+1]|=G[jm+i+1]||G[im+dim+j]; G
2013-07-26 20:41:36
2081
原创 csapp2e 家庭作业 6.46
void transpose(int *dst,int *src,int dim){ int i,j; int im,jm; for(i=0;i { im = i*dim; for(j=0;j { jm = j*dim; dst[jm+i]=src[im+j]; dst[jm+i+1]=src[im+dim+j]; dst[jm
2013-07-26 18:44:04
2759
原创 csapp2e 家庭作业 6.36
因为高速缓存能装下两个数组,所以只有冷不命中dst 和 src都是m h h h m h h hm h h hm h h h
2013-07-26 14:31:23
1795
原创 csapp2e 家庭作业 6.35
dstm h m hm m h mm h m hm m h msrc m m m mm m m m m m m mm m m m推倒过程见图,右侧是缓存里的两个行,为了能写的开 竖着写了。打对号的为命中的。右侧两列写的是缓存的状态更新。
2013-07-26 14:26:37
2863
3
原创 csapp2e 家庭作业 5.21
4 void psum3(float a[],float p[],long int n) 5 { 6 long int i; 7 p[0] = a[0]; 8 float val1,val2,val3=p[0]; 9 for (i=1;i 10 { 11 val1 = val3 + a[i]; 12
2013-07-25 17:54:16
2518
原创 csapp2e 家庭作业 5.20
double polyh2(double a[],double x,int degree){ long int i; double x2=x*x; double x3 =x2*x; double result1,result2,result3 = a[degree]; for(i=degree-1;i>=9;i-=9) { result1 = result3*x3
2013-07-25 17:34:38
2573
原创 csapp2e 家庭作业 5.19
void *memset1(void *s,int c,size_t n){ size_t cnt = 0; size_t k = sizeof(unsigned long); size_t i,j; unsigned long cl; unsigned char * schar =s; unsigned char * cchar =(char *)&cl; siz
2013-07-24 16:21:21
1907
原创 csapp2e 家庭作业 5.18
void inner7 (vec_ptr x,vec_ptr y;data_t *dest){ long int i; int length = vec_length(x); data_t *xdata = get_vec_start(x); data_t *ydata = get_vec_start(y);data_t sum = (data_t)0; long in
2013-07-24 15:29:28
1624
原创 csapp2e 家庭作业 5.17
void inner5 (vec_ptr x,vec_ptr y;data_t *dest){ long int i; int length = vec_length(x); data_t *xdata = get_vec_start(x); data_t *ydata = get_vec_start(y); data_t sum0 = (data_t)0;data_t
2013-07-24 15:27:23
2035
原创 csapp2e 家庭作业 5.16
void inner5 (vec_ptr x,vec_ptr y;data_t *dest){long int i;int length = vec_length(x);data_t *xdata = get_vec_start(x);data_t *ydata = get_vec_start(y);data_t sum = (data_t)0;long int lim
2013-07-24 15:22:46
3466
原创 csapp2e 家庭作业 6.45
cpu 为atom D2700 Clock frequency is approx. 2128.1 MHzMemory mountain (MB/sec) s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s
2013-07-19 19:23:08
2093
原创 csapp2e 家庭作业 6.37
A 不命中率是100%,因为发生了抖动B 不命中率是1/8 ,只有加载新行时发生不命中C 不命中率为1/8 ,数组的第一行和第二行分别加载到缓存同一组的不同行,不会冲突D 不能了,因为有冷不命中E 能,如果块变为64,则不命中率会降为1/16
2013-07-19 13:36:22
1982
原创 csapp2e 家庭作业 6.34
0x1314 0x1315 0x1316 0x1317 0x1794 0x1795 0x1796 0x1797
2013-07-19 13:13:30
1934
原创 csapp2e 家庭作业 6.28 6.29
顺序列出所有八个组的命中地址0 0x120 0x121 0x122 0x1231 0x8a4 0x8a5 0x8a6 0x8a7 0x704 0x705 0x706 0x7072 3 0x64c 0x64d 0x64e 0x64f4 0x18f0 0x18f1 0x18f2 0x18f3 0xb0 0xb1 0xb2 0xb35 0xe34 0xe35 0xe36 0xe3
2013-07-19 12:48:38
2000
原创 csapp2e 家庭作业 6.25
A 2.5ms+3ms+3072*0.01ms=36.22msB (2.5ms+3ms)*3072 = 16896ms
2013-07-19 12:21:13
2284
原创 csapp2e 家庭作业 6.24
硬盘转一圈的时间为5ms,所以平均旋转时间为2.5ms5ms/500=0.01ms 所以读一个扇区需要0.01ms总的时间为2.5ms+3ms+0.01ms=5.51ms
2013-07-19 12:14:32
1886
原创 csapp2e 家庭作业 4.57
A E_icode in {IMRMOVL,IPOPL} && E_dstM in {d_srcA,d_srcB} && !(D_icode in {IRMMOVL,IPUSHL})B 不要忘了修改 e_valA#/* $begin pipe-all-hcl */###############################################################
2013-07-09 12:11:51
3170
原创 csapp2e 家庭作业 4.56
#/* $begin pipe-all-hcl */##################################################################### HCL Description of Control for Pipelined Y86 Processor ## Copyright (C) Randal E. Bryant
2013-07-09 11:20:13
2608
原创 csapp2e 家庭作业 4.55
不知道是不是我自己的原因,我需要用到D_valC,但是原来的文件中没有声明,所以我自己声明了(和上一题一样)带valP穿过流水线的方法很简单,就是书中一直讲的那样。这里重点说一下把valC带过流水线的方法:用D_valB将valC带入执行阶段寄存器(需要修改d_valB),然后将aluA设为0,aluB设为valB,得到的M_valE即为穿过流水线的valC。#/* $begin pi
2013-07-08 23:31:08
2663
原创 csapp2e 家庭作业 4.54
一定不要忘了修改底部的流水线控制逻辑#/* $begin pipe-all-hcl */##################################################################### HCL Description of Control for Pipelined Y86 Processor ## Copyright
2013-07-08 21:37:22
2525
原创 csapp2e 家庭作业 4.52 4.53
ileave指令是会产生 使用/加载互锁的,但是这个指令的互锁有特殊之处,它固定写%ebp所以只和读这个寄存器的指令发生互锁,貌似ptest里的指令测试没有相关测试,所以修不修改文件结尾的流水线控制逻辑都能通过测试,但是一定要修改#/* $begin pipe-all-hcl */########################################################
2013-07-08 20:20:16
3330
原创 csapp2e 家庭作业 4.51
################ Pipeline Register Control ########################## Should I stall or inject a bubble into Pipeline Register F?# At most one of these can be true.bool F_bubble = 0;bool F_sta
2013-07-08 18:58:05
3546
3
原创 csapp2e 家庭作业 4.49 4.50
把两个作业放在一起做了。说一下模拟器使用步骤吧1 首先去http://csapp.cs.cmu.edu/public/students.html这个页面,点击第四章Source distribution (README)下载sim.tar,将它解压得到sim文件夹。2 修改sim文件夹下的MAKEFILE文件,我用的是命令行模式,所以把MAKEFILE里的三个选项都注释掉了,然后执行 ma
2013-07-05 09:32:59
4991
原创 csapp2e 家庭作业 4.46
修改在.L5修改后的IA32代码 .file "54.c" .text.globl bubble_a .type bubble_a, @functionbubble_a: pushl %ebp movl %esp, %ebp subl $16, %esp movl $1, -8(%ebp) jmp .L2.L6: movl -8(%ebp), %
2013-07-05 07:33:47
2487
1
原创 csapp2e 家庭作业 4.45
C代码#include void bubble_a(int *data,int count){ int i,next; for(next = 1;next < count;next++) { for(i = next-1;i >= 0;i--) if(data[i+1] < data[i]) { int t= data[i+1]; data[i+1]
2013-07-04 19:03:18
6351
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人