什么是电子计算机NXI并行线,计算机系统结构习题课(n2012)-万继光.ppt

这篇博客详细解析了计算机系统结构中的几个关键概念。首先介绍了GCD测试的规范化过程,指出在特定循环中不存在循环携带的真数据相关。接着讨论了循环展开对程序性能的影响,通过比较原始和展开后的循环,展示了减少空转周期的效果。最后,分析了两级Cache的不命中率,分别计算了局部和全局不命中率,并探讨了其对存储系统性能的影响。
摘要由CSDN通过智能技术生成

计算机系统结构习题课(n2012)-万继光

习题6.7( GCD测试方法) 在使用GCD测试之前,必须先对这段代码进行“规范化”——修改下标从1开始,而且每次循环后增加1。 For(i=1;i<=100;i+=2) a[i]=a[i-1]; 规范化为:For(k=1;k<=50;k++) a[2K]=a[2K-1]; 在这个循环中a=2,b=0,c=2,d=-1, 这样GCD(a,c)=2, d-b=-1, 由于前者不能够整除后者; 该循环不存在循环携带的真数据相关。 习题6.8(循环展开) 表6.1本节使用的浮点流水线的延迟 产生结果的指令 使用结果的指令 延迟(cycles) 浮点计算 另一个浮点计算 3 浮点计算 浮点store(S.D) 2 浮点Load(L.D) 浮点计算 1 浮点Load(L.D) 浮点store(S.D) 0 整数运算,分支延迟和load需要一个周期延迟, 如果分支的寄存器在前一条指令计算出,也需要一个周期延迟, 因为整数计算在第3个周期完成,而分支第2个周期就用到 DADDIU R1, R1, #-87 (空转)8 BNE R1, R2, Loop9 习题6.8 在不进行指令调度的情况下,程序的实际执行情况如下: 指令流出时钟 Loop:L.D F0, 0(R1)1 L.D F4, 0(R2)2 (空转)3 MUI.D F0, F0, F44 (空转)5(空转)6 (空转)7 ADD.D F2, F0, F28 DADDIU R1, R1, #-8 9 DADDIU R2, R2, #-810 BNE R1, R3, Loop11 (空转)12 计算原程序周期数: 每对元素所需的时钟周期数=12,其中空转数=5; 习题6.8 新程序 Loop: L.D F0,16(R1) ;F0 ←A(i+2) L.D F4,16(R2) ;F4 ←B(i+2) L.D F6,8(R1) ;F6 ←A(i+1) MUL.D F0,F0,F4 ;F0 ←A(i+2) ×B(i+2) L.D F8,8(R2) ;F8←B(i+1) L.D F10,0(R1) ;F10 ←A(i) MUL.D F6,F6,F8 ;F6 ←A(i+1) ×B(i+1) ADD.D F2,F0,F2 ; F2 ←F2+ A(i+2) ×B(i+2) L.D F12,0(R2) ;F12←B(i) DADDUI R1,R1,-24 ;R1 ←R1-24 MUL.D F10,F10,F12 ;F10 ←A(i) ×B(i) ADD.D F2,F6,F2 ; F2 ←F2+ A(i+1) ×B(i+1) DADDUI R2,R2,-24 ;R2 ←R2-24 BNE R1,R3,loop ;若R1 ≠R3,循环 (空转) ADD.D F2,F10,F2 ; F2 ←F2+ A(i) ×B(i) 新程序周期数:每对元素所需的时钟周期数=16/3=5.3,其中空转数=1/3=0.3 习题7.9(两级Cache ) 假设在3000次访存中,第一级cache不命中110次,第二级cache不命中55次。试问:在这种情况下,该cache系统的局部不命中率和全局不命中率各是多少? 解: 第一级cache不命中率(全局和局部)是110/3000,即3.67%; 第二级cache的局部不命中率是55/110,即50%; 第二级cache的全局不命中率是55/3000,即1.83%。 习题7.10(存储系统性能指标) 习题7.10 平均访问时间=命中时间+失效率×失效开销 平均访问时间1-路=2.0+1.4% *80=3.12ns 平均访问时间2-路=2.0*(1+10%)+1.0% *80=3.0ns 两路组相联的平均访问时间比较低 CPUtime=(CPU执行+存储等待周期)*时钟周期 CPUtime=(IC*CPI执行+总访存失效次数*失效开销) *时钟周期 =IC*(CPI执行*时钟周期+每条指令的访存次数*失效率*失效开销*时钟周期) CPU time 1-way=IC(2.0*2+1.2*0.014*80)=5.344IC CPU time 2-way=IC(2.2*2+1.2*0.01*80)=5.36IC 相对性能比:5.36/5.344

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信赖域算法加局部二次近似求解的Python代码如下: ```python import numpy as np from scipy.optimize import minimize def trust_region(func, grad, hess, x0, radius=1.0, tol=1e-6): x = x0 fval = func(x) gradval = grad(x) hessval = hess(x) while np.linalg.norm(gradval) > tol: # solve local quadratic model p = -np.linalg.solve(hessval, gradval) # calculate predicted and actual reduction pred = -0.5 * np.dot(gradval, p) actual = func(x + p) - fval # calculate rho rho = actual / pred if rho < 0.25: radius *= 0.25 elif rho > 0.75 and np.linalg.norm(p) == radius: radius = min(2.0 * radius, 100.0) if rho > 0.1: x += p fval = func(x) gradval = grad(x) hessval = hess(x) if np.linalg.norm(p) < tol or np.linalg.norm(gradval) < tol: break return x def b_series(b, x, y): n = len(x) s = 0.0 for i in range(n): s += np.power(np.e, b.dot(x[i])) * (y[i] - np.power(np.e, np.dot(b, x[i]))) / (1 + np.power(np.e, b.dot(x[i]))) return -s def b_series_grad(b, x, y): n = len(x) s = np.zeros(len(b)) for i in range(n): ebx = np.power(np.e, b.dot(x[i])) s += ebx * x[i] * (y[i] - ebx) / np.power(1 + ebx, 2) return -s def b_series_hess(b, x, y): n = len(x) s = np.zeros((len(b), len(b))) for i in range(n): ebx = np.power(np.e, b.dot(x[i])) s += np.outer(x[i], x[i]) * ebx * (ebx - y[i]) / np.power(1 + ebx, 2) return -s # example usage x = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) y = np.array([2, 4, 6, 8]) b0 = np.zeros(2) radius = 1.0 tol = 1e-6 b_opt = trust_region(lambda b: b_series(b, x, y), lambda b: b_series_grad(b, x, y), lambda b: b_series_hess(b, x, y), b0, radius, tol) print("Optimal b:", b_opt) print("Optimal value:", -b_series(b_opt, x, y)) ``` 其中,`trust_region` 函数是信赖域算法的实现,`b_series` 函数是目标函数,`b_series_grad` 函数是目标函数关于变量的梯度,`b_series_hess` 函数是目标函数关于变量的黑塞矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值