> Dr := 50: # number of registers in slice > k := 1: # slice width > Bw := 0.05: # bandwidth into each slice (per bit) > R := 30 : # registers in algorithm > Wb := 16 : # bits per word > Z := 10: # initial loads/saves > N := 30: # number of operations in a sequence > Er := m * k*Dr/Wb; # effective registers per pixel Er := 25/8 m > L := Wb/(m*Bw*k); # latency to load a word 320.0000000 L := ----------- m > A := Wb/(m*k); # time for an ALU operation on a pixel 16 A := ---- m > f := max(0.0001,1-Er/R); f := max(.0001, 1 - 5/48 m) > L_eff := ((1-f)^L + f*L -1)/f ; /320.0000000\ |-----------| \ m / L_eff := ((1 - max(.0001, 1 - 5/48 m)) max(.0001, 1 - 5/48 m) + 320.0000000 ---------------------- - 1)/max(.0001, 1 - 5/48 m) m > Tload := (Z+2*N*f)*L_eff; Tload := (10 + 60 max(.0001, 1 - 5/48 m)) ( /320.0000000\ |-----------| \ m / (1 - max(.0001, 1 - 5/48 m)) max(.0001, 1 - 5/48 m) + 320.0000000 ---------------------- - 1)/max(.0001, 1 - 5/48 m) m > plot(Tload,m=1..16,title=`Tload vs m`); > plot({L,L_eff},m=1..16,title=`Leff vs m`); > > plot(f,m=1..16,title=`Fmiss vs. m`); > Tseq := Tload + N*A; Tseq := (10 + 60 max(.0001, 1 - 5/48 m)) ( /320.0000000\ |-----------| \ m / (1 - max(.0001, 1 - 5/48 m)) max(.0001, 1 - 5/48 m) 480 + 320.0000000 ---------------------- - 1)/max(.0001, 1 - 5/48 m) + --- m m > plot(m*Tseq,m=1..16,title=`Performance as function of m`); > plot({L,L_eff/L},m=1..16,title=`Leff vs m`); > evalf(subs(m=16,Tseq)); 30.19001394 > plot({m*Tload,m*Tseq},m=1..16,title=`Performance as function of m`); > plot(f,m=1..16,title=`Miss frequency as function of m`); > plot(L_eff/L,m=1..16,title=`Leff vs m`); >