自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 立博宣言

《深入理解计算机系统》是计算机行业内公认的经典名著。本人准备细读此书,却发现本书大量的家庭作业没有答案。想了很多办法没能找到第二版的solution book。于是决定立此博客,将自己的答案记录并发布出来。如果错了,欢迎高人指正([email protected])。如果对了,也可以给后来人指路。

2013-04-19 12:44:49 4764 5

原创 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 1998 4

原创 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 2700 2

原创 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 1721

原创 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 2765 4

原创 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 2298 1

原创 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 2314

原创 csapp2e 家庭作业 5.22

S1 =1.25S2 = 1.2第一个方案好

2013-07-24 16:23:18 1626

原创 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 1840

原创 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 1566

原创 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 1923

原创 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 3386 2

原创 csapp2e 家庭作业 5.15

B 3C 1D 因为这里的数据相关时一个加法,单精度和双精度浮点加法的延迟是一样的。

2013-07-24 13:48:23 5896 7

原创 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 1965

原创 csapp2e 家庭作业 6.42 6.43 6.44

25%的不能命中

2013-07-19 19:03:32 2048

原创 csapp2e 家庭作业 6.41

A 还是1024B 64+64=128C 128/1024 = 1/8

2013-07-19 18:59:25 1360

原创 csapp2e 家庭作业 6.40

A 1024B 256C 1/4

2013-07-19 18:50:42 1248

原创 csapp2e 家庭作业 6.39

A 16*16*4=1024B 64C 1/16

2013-07-19 18:49:21 1342

原创 csapp2e 家庭作业 6.37

A 不命中率是100%,因为发生了抖动B 不命中率是1/8 ,只有加载新行时发生不命中C 不命中率为1/8 ,数组的第一行和第二行分别加载到缓存同一组的不同行,不会冲突D 不能了,因为有冷不命中E 能,如果块变为64,则不命中率会降为1/16

2013-07-19 13:36:22 1906

原创 csapp2e 家庭作业 6.34

0x1314 0x1315 0x1316 0x1317 0x1794 0x1795 0x1796 0x1797

2013-07-19 13:13:30 1815

原创 csapp2e 家庭作业 6.33

2013-07-19 13:09:29 1172

原创 csapp2e 家庭作业 6.32

2013-07-19 13:08:37 1677 3

原创 csapp2e 家庭作业 6.31

2013-07-19 13:01:11 1670

原创 csapp2e 家庭作业 6.30

2013-07-19 12:57:12 2391 3

原创 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 1929

原创 csapp2e 家庭作业 6.27

2013-07-19 12:32:13 1291

原创 csapp2e 家庭作业 6.26

2013-07-19 12:30:30 1734

原创 csapp2e 家庭作业 6.25

A 2.5ms+3ms+3072*0.01ms=36.22msB (2.5ms+3ms)*3072 = 16896ms

2013-07-19 12:21:13 2146 1

原创 csapp2e 家庭作业 6.24

硬盘转一圈的时间为5ms,所以平均旋转时间为2.5ms5ms/500=0.01ms 所以读一个扇区需要0.01ms总的时间为2.5ms+3ms+0.01ms=5.51ms

2013-07-19 12:14:32 1798

原创 csapp2e 家庭作业 6.23

2013-07-19 12:12:09 1957

原创 csapp2e 家庭作业 4.58

内循环里,第一个版本用了54条代码,第二个版本仅用了34条代码。参考练习题答案4.42

2013-07-09 12:26:33 1329

原创 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 3090

原创 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 2469

原创 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 2619 1

原创 csapp2e 家庭作业 4.54

一定不要忘了修改底部的流水线控制逻辑#/* $begin pipe-all-hcl */##################################################################### HCL Description of Control for Pipelined Y86 Processor ## Copyright

2013-07-08 21:37:22 2468 1

原创 csapp2e 家庭作业 4.52 4.53

ileave指令是会产生 使用/加载互锁的,但是这个指令的互锁有特殊之处,它固定写%ebp所以只和读这个寄存器的指令发生互锁,貌似ptest里的指令测试没有相关测试,所以修不修改文件结尾的流水线控制逻辑都能通过测试,但是一定要修改#/* $begin pipe-all-hcl */########################################################

2013-07-08 20:20:16 3259

原创 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 3499 4

原创 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 4933 1

原创 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 2346 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 3981 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除