。。思路是吧。那不写具体代码了。
def fun1(a, b, n):
return (a**2+b**2)*n
def fun2(n):
q = range((n+1)%2+1, n+1, 2)
return round(sum(1/i for i in q), 2)
def fun3(s):
return s == s[::-1]
def fun4(n):
s = 1
for i in range(n):
s *= i+1
return s
def fun5(n):
return sum(1/i for i in range(1, n+1))
def fun6(n):
s = 0
for i in range(n+1):
s += sum(range(i+1))
return s
一条指令流水线被分为
k
段,每一段时间都为Δt\Delta tΔt,连续输入n
条指令。
处理完n
个任务所用的时间记作TkT_kTk:
Tk=kΔt+(n−1)Δt T_k=k\Delta t+(n-1)\Delta t Tk=kΔt+(n−1)Δt
这个比较好理解,看时空图即可
吞吐率记作TPTPTP:
TP=nTk=nkΔt+(n−1)Δt TP= \frac{n}{T_k}=\frac{n}{k\Delta t+(n-1)\Delta t} TP=Tkn=kΔt+(n−1)Δtn
n个任务,用n除以总时间,就是每个任务的平均处理时间,平均多久处理一个任务,就是吞吐率。
效率:流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。
一共分为k
段,需要k
个设备,那么每个设备的效率我们记作eie_iei
一个设备,在整个过程中,每一条指令都要使用一次,所以使用了n次,加上每一次都是Δt\Delta tΔt,所以就是nΔtn\Delta tnΔt
ei=nΔtTk=nΔtkΔt+(n−1)Δt=nk+n−1 e_i=\frac {n\Delta t}{T_k}=\frac{n\Delta t}{k\Delta t+(n-1)\Delta t}=\frac{n}{k+n-1} ei=TknΔt=kΔt+(n−1)ΔtnΔt=k+n−1n
(ps:注意,这个只符合,当一个设备每一条指令都会使用它的情况。飞此情况的,并不适用。其实还是从定义出发,效率就是所有设备的实际运行时间,与整个运行时间的比值,其实就是时空图里面被填满的格子,比上总的面积。)
那么整段流水线的效率呢,就是每一段的效率,加起来,求个平均值。
又因为这每一段的效率都一样,所以求均值和不求一样。故整段流水线的效率为:
E=e1+e2+...+ekk=ke1k=e1=nΔtTk=nk+n−1 E=\frac{e_1+e_2+...+e_k}{k}=\frac{ke_1}{k}=e_1=\frac {n\Delta t}{T_k}=\frac{n}{k+n-1} E=ke1+e2+...+ek=kke1=e1=TknΔt=k+n−1n
这个结果其实还可以写作:
E=nΔtTk=TPΔt E=\frac {n\Delta t}{T_k}=TP\Delta t E=TknΔt=TPΔt