{VERSION 6 0 "IBM INTEL NT" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 4 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times " 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 2 1 0 1 0 2 2 0 1 } {PSTYLE "Text Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 2 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 1 3 1 } 1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE " " -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Map le Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Title" -1 18 1 {CSTYLE " " -1 -1 "Times" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }3 1 0 0 12 12 1 0 1 0 2 2 19 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 8 8 1 0 1 0 2 2 0 1 }{PSTYLE "Norma l" -1 256 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {PARA 18 "" 0 "" {TEXT -1 54 "Partition Trees, WHT Algorithms, and Cache Performance" }}{PARA 19 "" 0 "" {TEXT -1 14 "Jeremy Johnson " }}{PARA 0 "" 0 "" {TEXT -1 404 "\nA partition tree is a tree is a tr ee whose nodes are labeled by positive integers with the property that the sum of the labels of the children of a node sum to the label at \+ the node. A partition tree can be stored using Maple lists. A node i s a list containing the label and a list of the children. A leaf node is indicated by having an empty list of children. E.G. [3,[[1,[]],[ 2,[[1,[]],[1,[]]]] " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 528 "Partition trees can be used to model algorithms for co mputing the Walsh-Hadamard transform (WHT). Let x be a vector of size N = 2^n (input signal), then the WHT of x is the matrix vector produc t y = W_N x, where W_N is the N x N WHT matrix. Algorithms for comput ing the WHT can be obtained by factoring the W_N matrix and these fact orizations correspond to partition trees. In fact, corresponding to e ach partition tree there is a WHT algorithm and the space of WHT trees will be used to describe the space of WHT algorithms." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 1029 "This worksheet rev iews the defintion and key properties of the WHT, provides routines fo r manipulating and generating partition trees and an implementation of the WHT whose behavior is governed by a partition tree. The WHT impl ementation performs the computation of y = W_N x in-place. This means that the input vector x is modified so that after the computation x = y. No additional storage is required. After providing routines for \+ computing the WHT, a memory trace generator is given which produces th e list of memory addresses (actually indices into the array containing the data) accessed by all read accesses made by the WHT algorithm whe n accessing the array containing the input data. A cache simulator is provided that, given a sequence of addresses, returns the number of c ache misses for a cache with specified size, associativity, and block \+ size. Finally, a formula is derived which computes the number of cach e misses for a given cache design and WHT algorithm (determined by the corresponding partition tree)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {SECT 1 {PARA 3 "" 0 "" {TEXT -1 24 "Walsh-Hadamard Transform" }} {PARA 0 "" 0 "" {TEXT -1 128 "This section provides Maple procedures f or creating the WHT matrix and exploring some of the basic properties \+ of the WHT matrix." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 13 "with(linalg);" }}{PARA 7 "" 1 "" {TEXT -1 80 "Warning, the protected names norm and trace have been redefined an d unprotected\n" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7^r%.BlockDiagonalG %,GramSchmidtG%,JordanBlockG%)LUdecompG%)QRdecompG%*WronskianG%'addcol G%'addrowG%$adjG%(adjointG%&angleG%(augmentG%(backsubG%%bandG%&basisG% 'bezoutG%,blockmatrixG%(charmatG%)charpolyG%)choleskyG%$colG%'coldimG% )colspaceG%(colspanG%*companionG%'concatG%%condG%)copyintoG%*crossprod G%%curlG%)definiteG%(delcolsG%(delrowsG%$detG%%diagG%(divergeG%(dotpro dG%*eigenvalsG%,eigenvaluesG%-eigenvectorsG%+eigenvectsG%,entermatrixG %&equalG%,exponentialG%'extendG%,ffgausselimG%*fibonacciG%+forwardsubG %*frobeniusG%*gausselimG%*gaussjordG%(geneqnsG%*genmatrixG%%gradG%)had amardG%(hermiteG%(hessianG%(hilbertG%+htransposeG%)ihermiteG%*indexfun cG%*innerprodG%)intbasisG%(inverseG%'ismithG%*issimilarG%'iszeroG%)jac obianG%'jordanG%'kernelG%*laplacianG%*leastsqrsG%)linsolveG%'mataddG%' matrixG%&minorG%(minpolyG%'mulcolG%'mulrowG%)multiplyG%%normG%*normali zeG%*nullspaceG%'orthogG%*permanentG%&pivotG%*potentialG%+randmatrixG% +randvectorG%%rankG%(ratformG%$rowG%'rowdimG%)rowspaceG%(rowspanG%%rre fG%*scalarmulG%-singularvalsG%&smithG%,stackmatrixG%*submatrixG%*subve ctorG%)sumbasisG%(swapcolG%(swaprowG%*sylvesterG%)toeplitzG%&traceG%*t ransposeG%,vandermondeG%*vecpotentG%(vectdimG%'vectorG%*wronskianG" }} }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 67 "First we provide a function to construct the n X n identity matrix." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "de lta := proc(i,j)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "if (i = j) then return 1 else return 0; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&deltaGf*6$%\"iG%\"jG6\"F)F)@%/9 $9%O\"\"\"O\"\"!F)F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "I dentity := proc(n) " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " return lin alg[matrix](n,n,(i,j)->delta(i,j));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)IdentityGf*6#%\"nG6\"F(F (O-&%'linalgG6#%'matrixG6%9$F0f*6$%\"iG%\"jGF(6$%)operatorG%&arrowGF(- %&deltaG6$F09%F(F(F(F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "Identity(3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7%7%\" \"\"\"\"!F)7%F)F(F)7%F)F)F(Q(pprint06\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 320 "The Kronecker product of two matr ices is the block matrix obtained by replacing each element of the fir st matrix, by that element multiplied by the second matrix. If A is a n m X m matrix and B is an n X n matrix, then KroneckerProduct(A,B) is an mn X mn matrix. The Kronecker product is also called the tensor p roduct." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 342 "It is not difficult to show that the Kronecker product is associa tive but not generally commutative. Moreover, it satisfies the multip licative property: KroneckerProduct(A*B,C*D) = KroneckerProduct(A,C) \+ * KroneckerProduct(B,D). In particular, KroneckerProduct(A,B) = Krone ckerProduct(AI,IB) = KroneckerProduct(A,I) *KroneckerProduct(I,B)." } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 330 "KroneckerProduct := proc(A,B) \n local m,n,p,q,i,j,L; \n m := linalg[rowdim](A); n := linalg[coldim](A); \n p := linalg[rowdim](B) ; q := linalg[coldim](B); \n L := []; \n for i from m by -1 to 1 do \+ \n for j from n by -1 to 1 do \n L := [scalarmul(B,A[i,j]),op( L)]; \n od; \n od; \nreturn linalg[blockmatrix](m,n,L); \nend; \n " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%1KroneckerProductGf*6$%\"AG%\"BG 6)%\"mG%\"nG%\"pG%\"qG%\"iG%\"jG%\"LG6\"F1C)>8$-&%'linalgG6#%'rowdimG6 #9$>8%-&F76#%'coldimGF:>8&-F66#9%>8'-F?FE>8*7\"?(8(F4!\"\"\"\"\"%%true G?(8)F=FOFPFQ>FK7$-%*scalarmulG6$FF&F;6$FNFS-%#opG6#FKO-&F76#%,blockma trixG6%F4F=FKF1F1F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "A := matrix([[a11,a12],[a21,a22]]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"AGK%'matrixG6#7$7$%$a11G%$a12G7$%$a21G%$a22GQ(pprint16\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "B := matrix([[b11,b12],[b21,b22]]); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BGK%'matrixG6#7$7$%$b11G%$b12G 7$%$b21G%$b22GQ(pprint26\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "C := matrix([[c11,c12],[c21,c22]]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CGK%'matrixG6#7$7$%$c11G%$c12G7$%$c21G%$c22GQ(pprint36\"" }} }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 255 "The fol lowing provides an example of the Kronecker product and shows that it \+ is not commutative. Note that it is almost commutative in that the en tries of KroneckerProduct(B,A) are the same as those of KroneckerProdu ct(A,B) except that they are permuted." }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "KroneckerProduct(A,B);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&*&%$a11G\"\"\"%$b11G F**&F)F*%$b12GF**&%$a12GF*F+F**&F/F*F-F*7&*&F)F*%$b21GF**&F)F*%$b22GF* *&F/F*F3F**&F/F*F5F*7&*&%$a21GF*F+F**&F:F*F-F**&%$a22GF*F+F**&F=F*F-F* 7&*&F:F*F3F**&F:F*F5F**&F=F*F3F**&F=F*F5F*Q(pprint46\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "KroneckerProduct(B,A);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&*&%$a11G\"\"\"%$b11GF**&%$a12GF *F+F**&F)F*%$b12GF**&F-F*F/F*7&*&%$a21GF*F+F**&%$a22GF*F+F**&F3F*F/F** &F5F*F/F*7&*&F)F*%$b21GF**&F-F*F:F**&F)F*%$b22GF**&F-F*F=F*7&*&F3F*F:F **&F5F*F:F**&F3F*F=F**&F5F*F=F*Q(pprint56\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 161 "As indicated KroneckerProduct( A,B) can be obtained by permuting the rows and columns of KroneckerPro duct(B,A). The following computation illustrates this point." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "P := matrix([[1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"PGK%'matrixG6#7&7&\"\"\"\"\"!F+F+7&F+F+F *F+7&F+F*F+F+7&F+F+F+F*Q(pprint66\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "evalm(P &* KroneckerProduct(B,A) &* P);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&*&%$a11G\"\"\"%$b11GF**&F)F*%$b1 2GF**&%$a12GF*F+F**&F/F*F-F*7&*&F)F*%$b21GF**&F)F*%$b22GF**&F/F*F3F**& F/F*F5F*7&*&%$a21GF*F+F**&F:F*F-F**&%$a22GF*F+F**&F=F*F-F*7&*&F:F*F3F* *&F:F*F5F**&F=F*F3F**&F=F*F5F*Q(pprint76\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 88 "The following computation illus trates the associative property of the Kronecker product." }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "Krone ckerProduct(A,KroneckerProduct(B,C));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7*7**(%$a11G\"\"\"%$b11GF*%$c11GF**(F)F*F+F*%$c12GF**(F )F*%$b12GF*F,F**(F)F*F0F*F.F**(%$a12GF*F+F*F,F**(F3F*F+F*F.F**(F3F*F0F *F,F**(F3F*F0F*F.F*7**(F)F*F+F*%$c21GF**(F)F*F+F*%$c22GF**(F)F*F0F*F9F **(F)F*F0F*F;F**(F3F*F+F*F9F**(F3F*F+F*F;F**(F3F*F0F*F9F**(F3F*F0F*F;F *7**(F)F*%$b21GF*F,F**(F)F*FDF*F.F**(F)F*%$b22GF*F,F**(F)F*FGF*F.F**(F 3F*FDF*F,F**(F3F*FDF*F.F**(F3F*FGF*F,F**(F3F*FGF*F.F*7**(F)F*FDF*F9F** (F)F*FDF*F;F**(F)F*FGF*F9F**(F)F*FGF*F;F**(F3F*FDF*F9F**(F3F*FDF*F;F** (F3F*FGF*F9F**(F3F*FGF*F;F*7**(%$a21GF*F+F*F,F**(FXF*F+F*F.F**(FXF*F0F *F,F**(FXF*F0F*F.F**(%$a22GF*F+F*F,F**(FgnF*F+F*F.F**(FgnF*F0F*F,F**(F gnF*F0F*F.F*7**(FXF*F+F*F9F**(FXF*F+F*F;F**(FXF*F0F*F9F**(FXF*F0F*F;F* *(FgnF*F+F*F9F**(FgnF*F+F*F;F**(FgnF*F0F*F9F**(FgnF*F0F*F;F*7**(FXF*FD F*F,F**(FXF*FDF*F.F**(FXF*FGF*F,F**(FXF*FGF*F.F**(FgnF*FDF*F,F**(FgnF* FDF*F.F**(FgnF*FGF*F,F**(FgnF*FGF*F.F*7**(FXF*FDF*F9F**(FXF*FDF*F;F**( FXF*FGF*F9F**(FXF*FGF*F;F**(FgnF*FDF*F9F**(FgnF*FDF*F;F**(FgnF*FGF*F9F **(FgnF*FGF*F;F*Q(pprint86\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "KroneckerProduct(KroneckerProduct(A,B),C);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7*7**(%$a11G\"\"\"%$b11GF*%$c11GF**(F)F*F+F *%$c12GF**(F)F*%$b12GF*F,F**(F)F*F0F*F.F**(%$a12GF*F+F*F,F**(F3F*F+F*F .F**(F3F*F0F*F,F**(F3F*F0F*F.F*7**(F)F*F+F*%$c21GF**(F)F*F+F*%$c22GF** (F)F*F0F*F9F**(F)F*F0F*F;F**(F3F*F+F*F9F**(F3F*F+F*F;F**(F3F*F0F*F9F** (F3F*F0F*F;F*7**(F)F*%$b21GF*F,F**(F)F*FDF*F.F**(F)F*%$b22GF*F,F**(F)F *FGF*F.F**(F3F*FDF*F,F**(F3F*FDF*F.F**(F3F*FGF*F,F**(F3F*FGF*F.F*7**(F )F*FDF*F9F**(F)F*FDF*F;F**(F)F*FGF*F9F**(F)F*FGF*F;F**(F3F*FDF*F9F**(F 3F*FDF*F;F**(F3F*FGF*F9F**(F3F*FGF*F;F*7**(%$a21GF*F+F*F,F**(FXF*F+F*F .F**(FXF*F0F*F,F**(FXF*F0F*F.F**(%$a22GF*F+F*F,F**(FgnF*F+F*F.F**(FgnF *F0F*F,F**(FgnF*F0F*F.F*7**(FXF*F+F*F9F**(FXF*F+F*F;F**(FXF*F0F*F9F**( FXF*F0F*F;F**(FgnF*F+F*F9F**(FgnF*F+F*F;F**(FgnF*F0F*F9F**(FgnF*F0F*F; F*7**(FXF*FDF*F,F**(FXF*FDF*F.F**(FXF*FGF*F,F**(FXF*FGF*F.F**(FgnF*FDF *F,F**(FgnF*FDF*F.F**(FgnF*FGF*F,F**(FgnF*FGF*F.F*7**(FXF*FDF*F9F**(FX F*FDF*F;F**(FXF*FGF*F9F**(FXF*FGF*F;F**(FgnF*FDF*F9F**(FgnF*FDF*F;F**( FgnF*FGF*F9F**(FgnF*FGF*F;F*Q(pprint96\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 144 "Since the Kronecker product is as sociative, we can write a function that takes a sequence of matrices a s input and returns the Kronecker product" }}{PARA 0 "" 0 "" {TEXT -1 226 "of the sequence of matrices. This procedure takes advantage of M aple's mechanism for accessing a variable number of arguments [they ar e stored in a list called args and the number of arguments is stored i n the variable nargs." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "KP := proc()" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " local i, C;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " \+ C := linalg[matrix]([[1]]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " f or i from 1 to nargs do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " C := KroneckerProduct(C,args[i]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " o d;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " return eval(C);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#K PGf*6\"6$%\"iG%\"CGF&F&C%>8%-&%'linalgG6#%'matrixG6#7#7#\"\"\"?(8$F5F5 9#%%trueG>F,-%1KroneckerProductG6$F,&9\"6#F7O-%%evalG6#F,F&F&F&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "KP(A,B);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&*&%$a11G\"\"\"%$b11GF**&F)F*%$b12GF**&% $a12GF*F+F**&F/F*F-F*7&*&F)F*%$b21GF**&F)F*%$b22GF**&F/F*F3F**&F/F*F5F *7&*&%$a21GF*F+F**&F:F*F-F**&%$a22GF*F+F**&F=F*F-F*7&*&F:F*F3F**&F:F*F 5F**&F=F*F3F**&F=F*F5F*Q)pprint106\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "" 0 "" {TEXT -1 475 "KroneckerProduct(A,B) can be decompo sed into the product of Kronecker products involving the identity matr ix, which have a particularly simple form. In particular, KroneckerPr oduct(A,B) = KroneckerProduct(A,I_n) * KroneckerProduct(I_m,B), where \+ I_m and I_n are identity matrices of size m and n respectively. This \+ property follows from the multiplicative property of the Kronecker pro duct: simply write A as A * I_m and B as I_n * B, and apply the multi plicative property." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "KroneckerProduct(Identity(2),B);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&%$b11G%$b12G\"\"!F*7&%$b21G% $b22GF*F*7&F*F*F(F)7&F*F*F,F-Q)pprint116\"" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 32 "KroneckerProduct(A,Identity(2));" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#K%'matrixG6#7&7&%$a11G\"\"!%$a12GF)7&F)F(F)F*7&%$a21G F)%$a22GF)7&F)F-F)F.Q)pprint126\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 74 "multiply(KroneckerProduct(A,Identity(2)),KroneckerPro duct(Identity(2),B));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7 &7&*&%$a11G\"\"\"%$b11GF**&F)F*%$b12GF**&%$a12GF*F+F**&F/F*F-F*7&*&F)F *%$b21GF**&F)F*%$b22GF**&F/F*F3F**&F/F*F5F*7&*&%$a21GF*F+F**&F:F*F-F** &%$a22GF*F+F**&F=F*F-F*7&*&F:F*F3F**&F:F*F5F**&F=F*F3F**&F=F*F5F*Q)ppr int136\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 112 "The WHT matrix W_N, where N = 2^n, is the N X N matrix W_2 krone cker ... kronecker W_2, where W_2 is the matrix" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "W2 := matrix ([[1,1],[1,-1]]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#W2GK%'matrixG6 #7$7$\"\"\"F*7$F*!\"\"Q)pprint146\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "W4 := KroneckerProduct(W2,W2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#W4GK%'matrixG6#7&7&\"\"\"F*F*F*7&F*!\"\"F*F,7&F*F*F, F,7&F*F,F,F*Q)pprint156\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "W8 := KroneckerProduct(W2,W4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%#W8GK%'matrixG6#7*7*\"\"\"F*F*F*F*F*F*F*7*F*!\"\"F*F,F*F,F*F,7*F*F*F ,F,F*F*F,F,7*F*F,F,F*F*F,F,F*7*F*F*F*F*F,F,F,F,7*F*F,F*F,F,F*F,F*7*F*F *F,F,F,F,F*F*7*F*F,F,F*F,F*F*F,Q)pprint166\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "WHT := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " local W, W2, N, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " N : = 2^n; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " W2 := matrix([[1,1],[ 1,-1]]); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " if n = 1 then return eval(W2); fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " W := W2;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " for i from 2 to n do" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 32 " W := KroneckerProduct(W2,W);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " return eval(W);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$WHTGf*6#%\"nG6&%\"WG%#W2G%\"NG%\"iG6\"F-C (>8&)\"\"#9$>8%-%'matrixG6#7$7$\"\"\"F;7$F;!\"\"@$/F3F;O-%%evalG6#F5>8 $F5?(8'F2F;F3%%trueG>FE-%1KroneckerProductG6$F5FEO-FB6#FEF-F-F-" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "WHT(1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7$7$\"\"\"F(7$F(!\"\"Q)pprint176\"" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "WHT(2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&\"\"\"F(F(F(7&F(!\"\"F(F*7&F(F(F*F*7&F( F*F*F(Q)pprint186\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "WHT(3 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7*7*\"\"\"F(F(F(F(F( F(F(7*F(!\"\"F(F*F(F*F(F*7*F(F(F*F*F(F(F*F*7*F(F*F*F(F(F*F*F(7*F(F(F(F (F*F*F*F*7*F(F*F(F*F*F(F*F(7*F(F(F*F*F*F*F(F(7*F(F*F*F(F*F(F(F*Q)pprin t196\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 134 "Since the WHT is defined by the tensor product, the WHT matrix ca n be factored using the decomposition rule for the Kronecker product. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "W2I2 := KP(WHT(1),Identity(2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%W2I2GK%'matrixG6#7&7&\"\"\"\"\"!F*F+7&F+F*F+F*7&F*F+!\"\"F+7& F+F*F+F.Q)pprint206\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "I2 W2 := KP(Identity(2),WHT(1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%I2 W2GK%'matrixG6#7&7&\"\"\"F*\"\"!F+7&F*!\"\"F+F+7&F+F+F*F*7&F+F+F*F-Q)p print216\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "multiply(W2I2 ,I2W2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&\"\"\"F(F(F (7&F(!\"\"F(F*7&F(F(F*F*7&F(F*F*F(Q)pprint226\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 194 "This decomposition can b e generalized to factor WHT(n) into the product of n factors of the fo rm KroneckerProduct(I,W,I), where W is a smaller WHT matrix. This is \+ first illustrated with WHT(3)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "WI := KP(WHT(1),Identity(4)) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#WIGK%'matrixG6#7*7*\"\"\"\"\"! F+F+F*F+F+F+7*F+F*F+F+F+F*F+F+7*F+F+F*F+F+F+F*F+7*F+F+F+F*F+F+F+F*7*F* F+F+F+!\"\"F+F+F+7*F+F*F+F+F+F0F+F+7*F+F+F*F+F+F+F0F+7*F+F+F+F*F+F+F+F 0Q)pprint236\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "IWI := KP (Identity(2),WHT(1),Identity(2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %$IWIGK%'matrixG6#7*7*\"\"\"\"\"!F*F+F+F+F+F+7*F+F*F+F*F+F+F+F+7*F*F+! \"\"F+F+F+F+F+7*F+F*F+F.F+F+F+F+7*F+F+F+F+F*F+F*F+7*F+F+F+F+F+F*F+F*7* F+F+F+F+F*F+F.F+7*F+F+F+F+F+F*F+F.Q)pprint246\"" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 29 "IW := KP(Identity(4),WHT(1));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#IWGK%'matrixG6#7*7*\"\"\"F*\"\"!F+F+F+F+F+7*F*! \"\"F+F+F+F+F+F+7*F+F+F*F*F+F+F+F+7*F+F+F*F-F+F+F+F+7*F+F+F+F+F*F*F+F+ 7*F+F+F+F+F*F-F+F+7*F+F+F+F+F+F+F*F*7*F+F+F+F+F+F+F*F-Q)pprint256\"" } }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 114 "Verify that WHT(3) = WI * IWI * IW. Maple's evalm [evaluate matrix command \+ is used - &* is matrix multiplication]" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "evalm(WI &* IWI &* IW - \+ WHT(3));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7*7*\"\"!F(F(F (F(F(F(F(F'F'F'F'F'F'F'Q)pprint266\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 186 "In the last part of this secti on, we apply the WHT matrix to special vectors and note the result. T his will be used for debugging purposes when we write a function to co mpute y = WHT*x." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 283 "Note that if we apply WHT(n) to the vector with 2^n ones , we will always get a vector with 2^n is the first location and zeroe s elsewhere. This is due to the fact that there are an equal number o f 1's and -1's in every row of the WHT matrix except the first, where \+ there are N ones." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "x := v ector([1$8]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xGK%'vectorG6#7* \"\"\"F)F)F)F)F)F)F)Q)pprint276\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "evalm(WHT(3) &* x);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#K%'vectorG6#7*\"\")\"\"!F(F(F(F(F(F(Q)pprint286\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "x := vector([1$16]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xGK%'vectorG6#72\"\"\"F)F)F)F)F)F)F)F)F)F)F)F)F)F)F )Q)pprint296\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "evalm(WHT (4) &* x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#72\"#;\"\"!F (F(F(F(F(F(F(F(F(F(F(F(F(F(Q)pprint306\"" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 25 "Partition Tree Procedures " }}{PARA 0 "" 0 "" {TEXT -1 92 "This section collects procedures to p rint, generate, count, and investigate partition trees." }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 9 "BinToPart" }}{PARA 0 "" 0 "" {TEXT -1 532 "Write a Maple BinToPart(j,n) where n is a positive integer and 0 <= j < 2^(n-1), that returns a list of integers [n1,...,nt] with n1+...+nt = n. As j varies between 0 and 2^(n-1)-1 all posible such lists shou ld be generated. Such a function is obtained from the 1-1 mapping tha t maps a sequence of (n-1) 0's and 1's to an ordered partition of n. \+ Simply insert the zeros and ones in the (n-1) gaps between a string of all ones. Add adjacent ones in the string of ones until a 1 bit is e ncountered in the string of zeros and ones." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 173 "BinToPart:=proc(n ,j_in)\n local L,j,i;L:=[1];j:=j_in;\nfor i from 1 to n-1 do \nif(j mo d 2 = 1)then \nL:=[1,op(L)];\n else \nL:=subsop(1=L[1]+1,L);\nfi;\nj:= floor(j/2);\nend;\nL;\nend;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%*BinT oPartGf*6$%\"nG%%j_inG6%%\"LG%\"jG%\"iG6\"F-C&>8$7#\"\"\">8%9%?(8&F2F2 ,&9$F2F2!\"\"%%trueGC$@%/-%$modG6$F4\"\"#F2>F07$F2-%#opG6#F0>F0-%'subs opG6$/F2,&&F06#F2F2F2F2F0>F4-%&floorG6#,$*&#F2FBF2F4F2F2F0F-F-F-" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 74 "Let's confirm for ourselves that t his works by testing a few simple cases:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "seq(BinToPart(3,i),i=0..3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&7#\"\"$7$\"\"#\"\"\"7$F'F&7%F'F'F'" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 27 "seq(BinToPart(4,i),i=0..7);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*7#\"\"%7$\"\"$\"\"\"7$\"\"#F)7%F)F'F'7$F'F&7%F'F)F '7%F'F'F)7&F'F'F'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "seq( BinToPart(5,i),i=0..15);" }}{PARA 12 "" 1 "" {XPPMATH 20 "627#\"\"&7$ \"\"%\"\"\"7$\"\"$\"\"#7%F)F'F'7$F*F)7%F*F*F'7%F*F'F*7&F*F'F'F'7$F'F&7 %F'F)F'7%F'F*F*7&F'F*F'F'7%F'F'F)7&F'F'F*F'7&F'F'F'F*7'F'F'F'F'F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 4 "" 0 " " {TEXT -1 9 "PrintTree" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 149 "We'll \+ use a helper function so that the user of PrintTree doesn't need to wo rry about that initial empty string for the indentation of the root no de." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "PrintTree:=proc(T)\nPrintTreeSub(T,\"\");\nend;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%*PrintTreeGf*6#%\"TG6\"F(F(-%-PrintTreeSubG6$9$Q!F( F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "PrintTreeSub:=pro c(T,ind)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " local i, root, childr en;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " root := T[1]; children := T[2];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " printf(\"%s%d\\n\",ind, root);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " for i from nops(childre n) by -1 to 1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 42 " PrintTreeSu b(children[i],ind || \" \");" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " o d;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "end;\n" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%-PrintTreeSubGf*6$%\"TG%$indG6%%\"iG%%rootG%)children G6\"F-C&>8%&9$6#\"\"\">8&&F26#\"\"#-%'printfG6%Q&%s%d|+F-9%F0?(8$-%%no psG6#F6!\"\"F4%%trueG-F$6$&F66#F@(F>Q#~~F-F-F-F-" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 71 "Let's confirm that this works on the example in the homework, at least:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "PrintTree([3,[[2,[[1,[]], [1,[]]]], [1,[]]]]);" }}{PARA 0 "" 0 "" {TEXT -1 261 "If we were guaranteed binary trees, we might want to do an in-order traversal. But it's a bother to decide w here to put the root when the tree isn't binary. A pre-order traversal works just fine: putting the root at the beginning is as good as any \+ other scheme." }}{PARA 0 "" 0 "" {TEXT -1 1 "." }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 " " {TEXT -1 5 " 1" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 8 "RandTree " }}{PARA 0 "" 0 "" {TEXT -1 45 "Routines to generate a random partiti on tree." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "RandAux := rand(0..2^(31)-1); " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(RandAuxGf*6\"6#%\"tGF&F&C&>%&_seedG-%%iremG6$*&T#\" \"\"F+F1T%>8$F+?(F&F1F1T'%%trueGC$>F+F,>F4,&*&T)F1F4F1F1F+F1,&-F-6$F4T +F1T-F1F&6#F+6.%\"aG%\"aG%\"pG%\"pG%(concatsG%(concatsG%\"sG%\"sG%(div isorG%(divisorG%'offsetG%'offsetG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "Rand := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " return RandAux() mod n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%RandGf*6#%\"nG6\"F(F(O-%$modG6$-% (RandAuxGF(9$F(F(F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" } {MPLTEXT 1 0 128 "RandTree:=proc(root)\nlocal part,children,i;\npart:= BinToPart(root,Rand(2^(root-1)));\nif nops(part) = 1 then return [root ,[]]; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "children := [];" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "for i from 1 to nops(part) do " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 " children:=[op(children),RandTree( part[i])];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "return [root,children];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)RandTreeGf* 6#%%rootG6%%%partG%)childrenG%\"iG6\"F,C'>8$-%*BinToPartG6$9$-%%RandG6 #)\"\"#,&F3\"\"\"F:!\"\"@$/-%%nopsG6#F/F:O7$F37\">8%FC?(8&F:F:F>%%true G>FE7$-%#opG6#FE-F$6#&F/6#FGO7$F3FEF,F,F," }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 58 "RandExpandedTree:=proc(root,cutoff)\nl ocal part,children,i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "if root <= cutoff then return [root,[]]; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "part:=BinToPart(root,Rand(2^(root-1)-1)+1); # preclude part = [ro ot]" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "children := [];" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 31 "for i from 1 to nops(part) do " }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 60 " children:=[op(children),RandExpandedTree(p art[i],cutoff)];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 23 "return [root,children];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%1RandExpan dedTreeGf*6$%%rootG%'cutoffG6%%%partG%)childrenG%\"iG6\"F-C'@$19$9%O7$ F17\">8$-%*BinToPartG6$F1,&-%%RandG6#,&)\"\"#,&F1\"\"\"FC!\"\"FCFCFDFC FCFC>8%F5?(8&FCFC-%%nopsG6#F7%%trueG>FF7$-%#opG6#FF-F$6$&F76#FHF2O7$F1 FFF-F-F-" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{MPLTEXT 1 0 58 "Ra ndBinaryTree:=proc(root,cutoff)\nlocal part,children,i,k;" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 44 "if root <= cutoff then return [root,[]]; fi; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "if root = 2 then return [root,[ [1,[]],[1,[]]]]; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "k := Rand(r oot-2)+1; # preclude trivial split" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "part:=[k,root-k];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "children : = map((i)->RandBinaryTree(i,cutoff),part);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "return [root,children];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%/RandBinaryT reeGf*6$%%rootG%'cutoffG6&%%partG%)childrenG%\"iG%\"kG6\"F.C(@$19$9%O7 $F27\"@$/F2\"\"#O7$F27$7$\"\"\"F6F=>8',&-%%RandG6#,&F2F>F9!\"\"F>F>F>> 8$7$F@,&F2F>F@FF>8%-%$mapG6$f*6#F,F.6$%)operatorG%&arrowGF.-F$6$F2T$F. F.6$F(F3FHO7$F2FLF.F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 " T := RandBinaryTree(8,3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"TG7$ \"\")7$7$\"\"#7\"7$\"\"'7$7$\"\"$F*F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(T);" }}{PARA 6 "" 1 "" {TEXT -1 1 "8" }} {PARA 6 "" 1 "" {TEXT -1 3 " 6" }}{PARA 6 "" 1 "" {TEXT -1 5 " 3" }}{PARA 6 "" 1 "" {TEXT -1 5 " 3" }}{PARA 6 "" 1 "" {TEXT -1 3 " 2 " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "T := RandExpandedTree(8 ,3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"TG7$\"\")7&7$\"\"\"7\"F(7$ \"\"&7$7$\"\"#F*7$\"\"$F*F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(T);" }}{PARA 6 "" 1 "" {TEXT -1 1 "8" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 5" }}{PARA 6 "" 1 "" {TEXT -1 5 " 3" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 195 "Let's try a couple examples. Since maple is so nicely interactive, \"a couple\" means we just execute these ne xt two lines until we feel comfortable that what we think is happening above really is." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "T := RandTree( 7);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"TG7$\"\"(7\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(%);" }}{PARA 6 "" 1 "" {TEXT -1 1 "7" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {SECT 1 {PARA 4 "" 0 "" {TEXT -1 8 "GenTrees" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 43 "Routines to generate all partit ion trees. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "with(combinat,cartprod):" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 61 "Given a root value, we generate all partitions for that root:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "GenTrees := proc(root) option remember;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 45 " local S, T, part, trees, tree, children, j;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " S := \{[root,[]]\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " if root = 1 then return S; fi;" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 33 " for j from 1 to 2^(root-1)-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " part := BinToPart(root,j); " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " trees := map(GenTrees,part);" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " T := combinat[cartprod](trees) ;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " while not T[finished] do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " children := T[nextvalue](); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " tree := [root,children]; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " S := S union \{tree\};" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " return S ;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)GenTreesGf*6#%%rootG6)%\"SG%\"TG%%partG%&treesG%%tre eG%)childrenG%\"jG6#%)rememberG6\"C&>8$<#7$9$7\"@$/F8\"\"\"OF5?(8*F8&-%*BinToPartG6$F8F?>8'-%$mapG6$ F$FH>8%-&%)combinatG6#_FU%)cartprodG6#FM?(F2F 8)-&FR6#%*nextvalueGF2>8(7$F8F[o>F5-%&unionG6$F5<#FaoOF5F2F2F2" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "GenExpandedTrees := proc(roo t) option remember;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 45 " local S, T , part, trees, tree, children, j;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " S := \{\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " if root = 1 t hen return \{[1,[]]\}; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " for j from 1 to 2^(root-1)-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " \+ part := BinToPart(root,j); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " \+ trees := map(GenExpandedTrees,part);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " T := combinat[cartprod](trees);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " while not T[finished] do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 " children := T[nextvalue]();" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 30 " tree := [root,children];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 26 " S := S union \{tree\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " return S;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%1GenExpanded TreesGf*6#%%rootG6)%\"SG%\"TG%%partG%&treesG%%treeG%)childrenG%\"jG6#% )rememberG6\"C&>8$<\"@$/9$\"\"\"O<#7$F:7\"?(8*F:F:,&)\"\"#,&F9F:F:!\" \"F:F:FE%%trueGC&>8&-%*BinToPartG6$F9F@>8'-%$mapG6$F$FI>8%-&%)combinat G6#_FV%)cartprodG6#FN?(F2F:F:F24&FS6#%)finishedGC%>8)-&FS6#%*nextvalue GF2>8(7$F9F\\o>F5-%&unionG6$F5<#FboOF5F2F2F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "GenTrees(2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# <$7$\"\"#7$7$\"\"\"7\"F'7$F%F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "S3 := GenTrees(3);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#S3G<( 7$\"\"$7$7$\"\"\"7\"7$\"\"#7$F)F)7$F'7$F)7$F-F+7$F'F+7$F'7$F1F)7$F'7%F )F)F)7$F'7$F,F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "nops(S3); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 18 "S4 := GenTrees(4);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#S4G<:7$\"\"%7$7$\"\"\"7\"7$\"\"$7$7$\"\"#7$F)F)F)7$F'7$7$F0F+F47 $F'7%F/F)F)7$F'7$F)7$F-7$F)F/7$F'7$F)7$F-7$F)F47$F'7$F)7$F-F+7$F'7$F)7 $F-7$F4F)7$F'7$F)7$F-7%F)F)F)7$F'7%F)F4F)7$F'7%F)F/F)7$F'7$FDF)7$F'7$F HF)7$F'7$F,F)7$F'7&F)F)F)F)7$F'7%F)F)F/7$F'7%F)F)F47$F'7$F9F)7$F'7$F=F )7$F'7$FAF)7$F'7%F4F)F)7$F'F+7$F'7$F/F/7$F'7$F/F47$F'7$F4F/" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "nops(S4);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#\"#C" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "fo r T in S3 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " PrintTree(T); pr intf(\"\\n\");" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }}{PARA 6 " " 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }} {PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }} {PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }} {PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }} {PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }} {PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 2" }} {PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 1 "3" }} {PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }} {PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }} {PARA 6 "" 1 "" {TEXT -1 1 "3" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }} {PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 0 "" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 38 "Generate Iterative and Recursive Trees" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 126 "Routines to generat e special families of partition trees that correspond to recursive, it erative, and balanced WHT algorithms." }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "GenerateRightRec := proc (L::list(posint))" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " local n, roo t, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " n := nops(L);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " if (n = 1) then" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 23 " return [L[1],[]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " r oot := add(L[i],i=1..n);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 59 " R ETURN([root,[[L[1],[]],GenerateRightRec(L[2..n])]]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end; " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%1GenerateRightRecGf*6#'%\"LG-%%l istG6#%'posintG6%%\"nG%%rootG%\"iG6\"F1C$>8$-%%nopsG6#9$@%/F4\"\"\"O7$ &F86#F;7\"C$>8%-%$addG6$&F86#8&/FI;F;F4-%'RETURNG6#7$FC7$F=-F$6#&F86#; \"\"#F4F1F1F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "GenerateLe ftRec := proc(L::list(posint))" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " \+ local n, root, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " n := nops (L);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " if (n = 1) then" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " return [L[1],[]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " root := add(L[i],i=1..n);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 58 " RETURN([root,[GenerateLeftRec(L[2..n]),[L[1],[]]]]);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%0GenerateLef tRecGf*6#'%\"LG-%%listG6#%'posintG6%%\"nG%%rootG%\"iG6\"F1C$>8$-%%nops G6#9$@%/F4\"\"\"O7$&F86#F;7\"C$>8%-%$addG6$&F86#8&/FI;F;F4-%'RETURNG6# 7$FC7$-F$6#&F86#;\"\"#F4F=F1F1F1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "GenerateIterative := proc(L::list(posint))" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " local n, root, children, i, T;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " n := nops(L);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 27 " root := add(L[i],i=1..n);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " children := [seq([L[i],[]],i=1..n)];" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 26 " return [root, children];" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%2GenerateI terativeGf*6#'%\"LG-%%listG6#%'posintG6'%\"nG%%rootG%)childrenG%\"iG% \"TG6\"F3C&>8$-%%nopsG6#9$>8%-%$addG6$&F:6#8'/FB;\"\"\"F6>8&7#-%$seqG6 $7$F@7\"FCO7$F " 0 "" {MPLTEXT 1 0 27 " GenerateBalanced := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " lo cal root, i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " if (n = 1) then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " return [1,[]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 " return [n,[GenerateBalanced(ceil(n/2)),GenerateBalanced(fl oor(n/2))]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%1Ge nerateBalancedGf*6#%\"nG6$%%rootG%\"iG6\"F+@%/9$\"\"\"O7$F/7\"O7$F.7$- F$6#-%%ceilG6#,$*&#F/\"\"#F/F.F/F/-F$6#-%&floorGF:F+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Generate34Rule := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " local root, k;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " if (n = 1) then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " return [1,[]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " el se" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " k := ceil(simplify(log[ 2](n))); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " if n/2^k >= 3/4 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 " return [n,[Generat e34Rule(2^(k-1)),Generate34Rule(n-2^(k-1))]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 " \+ return [n,[Generate34Rule(n-2^(k-2)),Generate34Rule(2^(k-2))]];" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%/Generate34RuleGf*6#%\"nG6$%%rootG% \"kG6\"F+@%/9$\"\"\"O7$F/7\"C$>8%-%%ceilG6#-%)simplifyG6#-&%$logG6#\" \"#6#F.@%1#\"\"$\"\"%*&F.F/)F@F5!\"\"O7$F.7$-F$6#)F@,&F5F/F/FI-F$6#,&F .F/FOFIO7$F.7$-F$6#,&F.F/)F@,&F5F/F@FIFI-F$6#FZF+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "Tr := GenerateLeftRec([1,1,1]);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#TrG7$\"\"$7$7$\"\"#7$7$\"\"\"7\"F+F +" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "PrintTree(Tr);" }} {PARA 6 "" 1 "" {TEXT -1 1 "3" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }} {PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "Ti := GenerateIterative([1,1,1]);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#TiG7$\"\"$7%7$\"\"\"7\"F(F(" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 14 "PrintTree(Ti);" }}{PARA 6 "" 1 "" {TEXT -1 1 " 3" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " \+ 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "Tb := GenerateBalanced(8);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#TbG7$\"\")7$7$\"\"%7$7$\"\"#7$7$\"\"\"7\"F.F+F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "PrintTree(Tb);" }}{PARA 6 " " 1 "" {TEXT -1 1 "8" }}{PARA 6 "" 1 "" {TEXT -1 3 " 4" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }} {PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " \+ 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 4" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 " " 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }} {PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " \+ 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Tp := Generate34Rul e(11);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#TpG7$\"#67$7$\"\"(7$7$\" \"%7$7$\"\"#7$7$\"\"\"7\"F1F.7$\"\"$7$F.F1F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "PrintTree(Tp);" }}{PARA 6 "" 1 "" {TEXT -1 2 "11 " }}{PARA 6 "" 1 "" {TEXT -1 3 " 4" }}{PARA 6 "" 1 "" {TEXT -1 5 " \+ 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 7" }}{PARA 6 "" 1 "" {TEXT -1 5 " 3" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 4" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2 " }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Tp := Gener ate34Rule(12);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#TpG7$\"#77$7$\"\" )7$7$\"\"%7$7$\"\"#7$7$\"\"\"7\"F1F.F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "PrintTree(Tp);" }}{PARA 6 "" 1 "" {TEXT -1 2 "12" }} {PARA 6 "" 1 "" {TEXT -1 3 " 4" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " \+ 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 " " {TEXT -1 3 " 8" }}{PARA 6 "" 1 "" {TEXT -1 5 " 4" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }} {PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " \+ 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 4" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 11 "WHT P rogram" }}{PARA 0 "" 0 "" {TEXT -1 116 "An algorithm to compute the WH T using a specified partition tree. The Maple function EvalWHT comput es x = WHT(n) x." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 198 "Recall that for N = 2^n, an algorithm to compute x = WHT (n) x can be obtained from a partition tree of n. The algorithm corre sponds to recursive factorizations of the WHT matrix of size N. If n \+ = " }{XPPEDIT 18 0 "n[1]" "6#&%\"nG6#\"\"\"" }{TEXT -1 8 "+ ... + " } {XPPEDIT 18 0 "n[t]" "6#&%\"nG6#%\"tG" }{TEXT -1 6 " then " }{XPPEDIT 18 0 "WHT(n) = Product(KP(Identity(N(i-1)),WHT(n[i]),Identity(N/N(i))) ,i = 1 .. t);" "6#/-%$WHTG6#%\"nG-%(ProductG6$-%#KPG6%-%)IdentityG6#-% \"NG6#,&%\"iG\"\"\"F6!\"\"-F%6#&F'6#F5-F/6#*&F2F6-F26#F5F7/F5;F6%\"tG " }{TEXT -1 8 ", where " }{XPPEDIT 18 0 "N(i) = Product(2^n[i],i = 1 . . t);" "6#/-%\"NG6#%\"iG-%(ProductG6$)\"\"#&%\"nG6#F'/F';\"\"\"%\"tG" }{TEXT -1 210 ". This factorization leads to a program with a triply \+ nested loop to compute x = WHT(n) x. The outer loop iteratively appli es the factors in the product to the input vector x, and the inner two loops compute " }{XPPEDIT 18 0 "x = KP(Identity(R),WHT(n[i]),Identity (S))" "6#/%\"xG-%#KPG6%-%)IdentityG6#%\"RG-%$WHTG6#&%\"nG6#%\"iG-F)6#% \"SG" }{TEXT -1 113 " for R = N(i-1) and S = N/N(i). The middle loop \+ corresponds to Identity(R) and iterates over the blocks of size " } {XPPEDIT 18 0 "2^n[i]*S" "6#*&)\"\"#&%\"nG6#%\"iG\"\"\"%\"SGF*" } {TEXT -1 4 " in " }{XPPEDIT 18 0 "KP(Identity(R),WHT(n[i]),Identity(S) );" "6#-%#KPG6%-%)IdentityG6#%\"RG-%$WHTG6#&%\"nG6#%\"iG-F'6#%\"SG" } {TEXT -1 34 ". The innder loop corresponds to " }{XPPEDIT 18 0 "KP(WH T(n[i]),Identity(S)) " "6#-%#KPG6$-%$WHTG6#&%\"nG6#%\"iG-%)IdentityG6# %\"SG" }{TEXT -1 25 "and computes S copies of " }{XPPEDIT 18 0 "WHT(n[ i])" "6#-%$WHTG6#&%\"nG6#%\"iG" }{TEXT -1 103 " where the data is acce ssed at stride S. The algorithm applies itself recursively for each t o compute " }{XPPEDIT 18 0 "WHT(n[i])" "6#-%$WHTG6#&%\"nG6#%\"iG" } {TEXT -1 443 ". Since the recursive call is applied to a subvector of x whose elements are accessed at stride S, it is necessary to provide input parameters base and stride which indicate the starting element \+ and stride of the subvector that is used. When the above factorizatio n is applied to the recursive computation of the subvector, additional strides are introduced and these strides must be multiplied by the st ride used to specify the subvector. " }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "" 0 "" {TEXT -1 764 "Leaf nodes in the partition tree cor respond to the base case of the recursion. In a high-performance impl ementation the base case, would be computed by straight-line code that avoids the overhead of loops and recursion. In the case, where the b ase case corresponds to WHT(1), the code simply adds and subtracts the appropriate elements of the input vector. In our implementation, Eva lSmall is used to compute the base case. EvalSmall actually construct s the appropriate WHT matrix and performs the computation using a matr ix-vector product. This approach works, but is inefficient for base c ases larger than n = 1, since it uses an order N^2 algorithm (when the above factorization is used recursively down to a base case of n=1, t he algorithm requires order " }{XPPEDIT 18 0 "N*log[2](N)" "6#*&%\"NG \"\"\"-&%$logG6#\"\"#6#F$F%" }{TEXT -1 12 " operations." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "EvalSma ll := proc(n,x,base,stride)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " lo cal N,W,xt,i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " N := 2^n; W : = WHT(n);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " xt := linalg[vecto r](N);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for i from 0 to N-1 d o" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " xt[i+1] := x[base+i*stri de];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 23 " xt := evalm(W&*xt);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for i from 0 to N-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " x[base+i*stride] := xt[i+1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%*EvalSmallGf*6&%\"nG%\"xG%%baseG%' strideG6&%\"NG%\"WG%#xtG%\"iG6\"F0C(>8$)\"\"#9$>8%-%$WHTG6#F6>8&-&%'li nalgG6#%'vectorG6#F3?(8'\"\"!\"\"\",&F3FGFG!\"\"%%trueG>&F=6#,&FEFGFGF G&9%6#,&9&FG*&FEFG9'FGFG>F=-%&evalmG6#-%#&*G6$F8F=?(FEFFFGFHFJ>FOFLF0F 0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "x := array(0..15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xG-%&arrayG6$;\"\"!\"#:7\"" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "for i from 0 to 15 do" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " x[i] := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "conv ert(x,vector);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#72\"\"\" F'F'F'F'F'F'F'F'F'F'F'F'F'F'F'Q)pprint316\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "EvalSmall(3,x,1,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "convert(x,ve ctor);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#72\"\"\"\"\")F' \"\"!F'F)F'F)F'F)F'F)F'F)F'F)Q)pprint326\"" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 32 "EvalWHT := proc(W,x,base,stride)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 " local n, N, children, W1, N1, n1, t, R, S, i, j, k;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 64 " n := W[1]; N := 2^n; chi ldren := W[2]; t := nops(children);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " if t = 0 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " EvalSm all(n,x,base,stride); return;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " \+ fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " R := N; S := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for i from t by -1 to 1 do" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 61 " W1 := children[i]; n1 := W1[1]; N1 := \+ 2^n1; R := R/N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for j from 0 to R-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for k from 0 \+ to S-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " EvalWHT(W1,x,b ase+(j*N1*S+k)*stride,S*stride);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 14 " S := S*N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(EvalWHTGf*6&%\"WG%\"xG%%baseG%'strideG6.%\"nG% \"NG%)childrenG%#W1G%#N1G%#n1G%\"tG%\"RG%\"SG%\"iG%\"jG%\"kG6\"F8C*>8$ &9$6#\"\"\">8%)\"\"#F;>8&&F=6#FC>8*-%%nopsG6#FE@$/FI\"\"!C$-%*EvalSmal lG6&F;9%9&9'OF8>8+FA>8,F??(8-FI!\"\"F?%%trueGC(>8'&FE6#Fgn>8)&F\\oF>>8 ()FCF`o>FY*&FYF?FcoFhn?(8.FOF?,&FYF?F?FhnFin?(8/FOF?,&FenF?F?FhnFin-F$ 6&F\\oFT,&FUF?*&,&*(FhoF?FcoF?FenF?F?F[pF?F?FVF?F?*&FenF?FVF?>Fen*&Fen F?FcoF?F8F8F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "x := array (0..15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xG-%&arrayG6$;\"\"!\"# :7\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "for i from 0 to 15 \+ do x[i] := 1; od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "conve rt(x,vector);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#72\"\"\"F 'F'F'F'F'F'F'F'F'F'F'F'F'F'F'Q)pprint336\"" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 38 "W := [4,[[3,[[2,[]],[1,[]]]],[1,[]]]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"WG7$\"\"%7$7$\"\"$7$7$\"\"#7\"7$\"\"\"F-F. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(W);" }}{PARA 6 "" 1 "" {TEXT -1 1 "4" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 3" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "EvalWHT(W,x,0,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#;" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "convert(x,vector);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'vectorG6#72\"#;\"\"!F(F(F(F(F(F(F(F(F(F(F (F(F(F(Q)pprint346\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 9 "WHT Trace" }}{PARA 0 "" 0 "" {TEXT -1 429 "This section provides Maple functions that return the se quence of addresses used by the WHT algorithm from the previous sectio n. The first version, TraceSmall, assumes that EvalSmall only access es the input/output vector once. The second version TraceSmallRW, pr oduces address for two sequences of interleaved reads followed by one \+ sequence of writes. This is the access pattern used by the WHT packag e (see www.spiral.net)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "TraceSmall := " }{TEXT -1 0 "" } {MPLTEXT 1 0 19 "proc(n,base,stride)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " local N,i,addr;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " N := 2 ^n; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " addr := seq(base+i*strid e,i=0..N-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " return [addr];" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+TraceSmallGf*6%%\"nG%%baseG%'strideG6%%\"NG%\"iG%%addrG6\"F.C %>8$)\"\"#9$>8&-%$seqG6$,&9%\"\"\"*&8%F<9&F;\"\"!,&F1F " 0 "" {MPLTEXT 1 0 18 "TraceSmall(2,1 ,4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"\"\"\"&\"\"*\"#8" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "TraceSmall(2,0,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"!\"\"\"\"\"#\"\"$" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 16 "TraceSmallRW := " }{TEXT -1 0 "" }{MPLTEXT 1 0 19 "proc(n,base,stride)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " lo cal N,i, waddr, raddr;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " N := 2^ n; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 120 " raddr := map((x)->op(x), [seq([base+2*i*stride,base+(2*i+1)*stride,base+2*i*stride,base+(2*i+1) *stride],i=0..N/2-1)]); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " waddr := seq(base+i*stride,i=0..N-1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " return [op(raddr),waddr];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end; " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%-TraceSmallRWGf*6%%\"nG%%baseG%' strideG6&%\"NG%\"iG%&waddrG%&raddrG6\"F/C&>8$)\"\"#9$>8'-%$mapG6$f*6#% \"xGF/6$%)operatorG%&arrowGF/-%#opG6#F5F/F/F/7#-%$seqG6$7&,&9%\"\"\"*( F4FK8%FK9&FKFK,&FJFK*&,&*&F4FKFMFKFKFKFKFKFNFKFKFIFO/FM;\"\"!,&*&#FKF4 FKF2FKFKFK!\"\">8&-FF6$,&FJFK*&FMFKFNFKFK/FM;FU,&F2FKFKFYO7$-FB6#F7Fen F/F/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "TraceSmallRW(2,0, 1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7.\"\"!\"\"\"F$F%\"\"#\"\"$F&F' F$F%F&F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "TraceSmallRW(2, 1,4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7.\"\"\"\"\"&F$F%\"\"*\"#8F&F 'F$F%F&F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "TraceWHT := pr oc(W,base,stride)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 59 " local n, N, \+ children, W1, N1, n1, t, R, S, i, j, k, addr;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 64 " n := W[1]; N := 2^n; children := W[2]; t := nops (children);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " if t = 0 then" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 " return TraceSmall(n,base,stride ); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " addr := []; R := N; S := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for i from t by -1 to 1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 61 " W1 := children[i]; n1 := W1[1]; N1 := 2^n1; R \+ := R/N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for j from 0 to R-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for k from 0 to S-1 do " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 " addr := [op(addr),op(Tr aceWHT(W1,base+(j*N1*S+k)*stride,S*stride))];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " S := S*N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " ret urn addr;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#>%)TraceWHTGf*6%%\"WG%%baseG%'strideG6/%\"nG%\"NG%)ch ildrenG%#W1G%#N1G%#n1G%\"tG%\"RG%\"SG%\"iG%\"jG%\"kG%%addrG6\"F8C,>8$& 9$6#\"\"\">8%)\"\"#F;>8&&F=6#FC>8*-%%nopsG6#FE@$/FI\"\"!O-%+TraceSmall G6%F;9%9&>807\">8+FA>8,F??(8-FI!\"\"F?%%trueGC(>8'&FE6#Fhn>8)&F]oF>>8( )FCFao>FZ*&FZF?FdoFin?(8.FOF?,&FZF?F?FinFjn?(8/FOF?,&FfnF?F?FinFjn>FW7 $-%#opG6#FW-Fap6#-F$6%F]o,&FTF?*&,&*(FioF?FdoF?FfnF?F?F\\pF?F?FUF?F?*& FfnF?FUF?>Ffn*&FfnF?FdoF?OFWF8F8F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "TraceWHTRW := proc(W,base,stride)" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 59 " local n, N, children, W1, N1, n1, t, R, S, i, j, \+ k, addr;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 64 " n := W[1]; N := 2^n; children := W[2]; t := nops(children);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " if t = 0 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " return TraceSmallRW(n,base,stride); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " addr := \+ []; R := N; S := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for i fr om t by -1 to 1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 61 " W1 := chi ldren[i]; n1 := W1[1]; N1 := 2^n1; R := R/N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for j from 0 to R-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for k from 0 to S-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 78 " addr := [op(addr),op(TraceWHTRW(W1,base+(j*N1 *S+k)*stride,S*stride))];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " o d;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " S := S*N1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " \+ od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " return addr;" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%+Tr aceWHTRWGf*6%%\"WG%%baseG%'strideG6/%\"nG%\"NG%)childrenG%#W1G%#N1G%#n 1G%\"tG%\"RG%\"SG%\"iG%\"jG%\"kG%%addrG6\"F8C,>8$&9$6#\"\"\">8%)\"\"#F ;>8&&F=6#FC>8*-%%nopsG6#FE@$/FI\"\"!O-%-TraceSmallRWG6%F;9%9&>807\">8+ FA>8,F??(8-FI!\"\"F?%%trueGC(>8'&FE6#Fhn>8)&F]oF>>8()FCFao>FZ*&FZF?Fdo Fin?(8.FOF?,&FZF?F?FinFjn?(8/FOF?,&FfnF?F?FinFjn>FW7$-%#opG6#FW-Fap6#- F$6%F]o,&FTF?*&,&*(FioF?FdoF?FfnF?F?F\\pF?F?FUF?F?*&FfnF?FUF?>Ffn*&Ffn F?FdoF?OFWF8F8F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "W := [4 ,[[3,[[2,[]],[1,[]]]],[1,[]]]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"WG7$\"\"%7$7$\"\"$7$7$\"\"#7\"7$\"\"\"F-F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(W);" }}{PARA 6 "" 1 "" {TEXT -1 1 "4" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 3" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " \+ 2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "T1 := TraceWHT(W,0,1) ;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#T1G7R\"\"!\"\"\"\"\"#\"\"$\"\" %\"\"&\"\"'\"\"(\"\")\"\"*\"#5\"#6\"#7\"#8\"#9\"#:F&F(F*F,F.F0F2F4F&F* F.F2F(F,F0F4F'F)F+F-F/F1F3F5F'F+F/F3F)F-F1F5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "W := [4,[ [1,[]], [3,[[1,[]],[2,[]]]]]];" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"WG7$\"\"%7$7$\"\"\"7\"7$\"\"$7$F(7 $\"\"#F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(W);" }}{PARA 6 "" 1 "" {TEXT -1 1 "4" }}{PARA 6 "" 1 "" {TEXT -1 3 " 3" }} {PARA 6 "" 1 "" {TEXT -1 5 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1 " }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "T2 := TraceWHT(W,0,1);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#T2G7R\"\"!\"\"\"\"\"#\"\"$\"\"%\"\"&\"\"'\"\"(F&F*F'F+F(F,F)F -\"\")\"\"*\"#5\"#6\"#7\"#8\"#9\"#:F.F2F/F3F0F4F1F5F&F.F'F/F(F0F)F1F*F 2F+F3F,F4F-F5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {SECT 1 {PARA 3 "" 0 "" {TEXT -1 15 "Cache Simulator" }}{PARA 0 "" 0 " " {TEXT -1 338 "This section provides a simple cache simulator, which \+ takes three cache design parameters [size, associativity, and block si ze] and a sequence of addresses and returns the number of cache misses . The simulator only simulates a single level unified cache [the addr ess sequence does not distinguish reads, writes or instructions vs. da ta]." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 448 " Create a data structure for the Cache simulator. An array, indexed by the cache index and set, is returned. Each entry in the array stores the tag and a clock tick, which is used to keep track of the time [in dex into the address list that is passed to the simulator] that the el ement is accessed. A zero entry in the clock field indicates that the cache entry is invalid. The clock information is used to implement t he lru replacement strategy." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Cache := proc(C,A,B)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " local i, j, cache, slots;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " slots := C/(B*A); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 36 " cache := array(0..slots-1,0..A-1);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for i from 0 to slots-1 do" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " for j from 0 to A-1 do" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " cache[i,j] := table([tag=0,cl ock=0]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " ret urn eval(cache);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2 " " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&Cac heGf*6%%\"CG%\"AG%\"BG6&%\"iG%\"jG%&cacheG%&slotsG6\"F/C&>8'*(9$\"\"\" 9&!\"\"9%F7>8&-%&arrayG6$;\"\"!,&F2F5F5F7;F?,&F8F5F5F7?(8$F?F5F@%%true G?(8%F?F5FBFE>&F:6$FDFG-%&tableG6#7$/%$tagGF?/%&clockGF?O-%%evalG6#F:F /F/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "cache := Cache(8,1 ,1);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&cacheGK%&ARRAYG6$7$;\"\"!\" \"(;F*F*7*/6$F*F*K%&TABLEG6#7$/%$tagGF*/%&clockGF*Q)pprint406\"/6$\"\" \"F*KF1F2Q)pprint41F9/6$\"\"#F*KF1F2Q)pprint42F9/6$\"\"$F*KF1F2Q)pprin t39F9/6$\"\"%F*KF1F2Q)pprint38F9/6$\"\"&F*KF1F2Q)pprint35F9/6$\"\"'F*K F1F2Q)pprint36F9/6$F+F*KF1F2Q)pprint37F9Q)pprint43F9" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "CacheSim := proc(addr,C,A,B,TRACE)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 82 " local cache, slots, i, j, n, bloc k, offset, index, found, rep, minclock, misses;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 57 " cache := Cache(C,A,B); slots := C/(A*B); misses : = 0;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " if TRACE then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 75 " printf(\"Cache size = %d, Associativity = %d, Block size = %d\\n\",C,A,B);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " printf(\"Number of slots = %d\\n\",slots);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " n := n ops(addr);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " for i from 1 to n d o " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 56 " block := floor(addr[i]/B ); offset := addr[i] mod B;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 " \+ index := block mod slots; found := false;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 75 " if TRACE then printf(\"%d-th address = %d -> %d\\ n\",i,addr[i],index); fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " fo r j from 0 to A-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 " if bl ock = cache[index,j][tag] and cache[index,j][clock] > 0 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 " found := true; cache[index,j][c lock] := i; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " if TRACE \+ then printf(\"hit\\n\"); fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " \+ fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 21 " if not found then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " if TRACE then printf(\"miss\\n\"); fi;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 " misses := misses + 1; mincloc k := n+1; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " for j from 0 t o A-1 do " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 " if cache [index,j][clock] < minclock then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 55 " minclock := cache[index,j][clock]; rep := j;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " \+ cache[index,rep][tag] := block;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " cache[index,rep][clock] := i;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " return misses;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)CacheSimGf*6'%%addrG %\"CG%\"AG%\"BG%&TRACEG6.%&cacheG%&slotsG%\"iG%\"jG%\"nG%&blockG%'offs etG%&indexG%&foundG%$repG%)minclockG%'missesG6\"F9C)>8$-%&CacheG6%9%9& 9'>8%*(F@\"\"\"FA!\"\"FBFG>8/\"\"!@$9(C$-%'printfG6&QVCache~size~=~%d, ~Associativity~=~%d,~Block~size~=~%d|+F9F@FAFB-FO6$Q6Number~of~slots~= ~%d|+F9FD>8(-%%nopsG6#9$?(8&FFFFFV%%trueGC)>8)-%&floorG6#*&&FZ6#FfnFFF BFG>8*-%$modG6$F_oFB>8+-Fdo6$FjnFD>8,%&falseG@$FL-FO6&Q:%d-th~address~ =~%d~->~%d|+F9FfnF_oFgo?(8'FJFF,&FAFFFFFGFgn@$3/Fjn&&F<6$FgoFbp6#%$tag G2FJ&Fhp6#%&clockGC%>F[pFgn>F]qFfn@$FL-FO6#Q%hit|+F9@$4F[pC(@$FL-FO6#Q &miss|+F9>FI,&FIFFFFFF>8.,&FVFFFFFF?(FbpFJFFFcpFgn@$2F]qFarC$>FarF]q>8 -Fbp>&&F<6$FgoFirFjpFjn>&F\\sF^qFfnOFIF9F9F9" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "T1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7R\"\"!\" \"\"\"\"#\"\"$\"\"%\"\"&\"\"'\"\"(\"\")\"\"*\"#5\"#6\"#7\"#8\"#9\"#:F$ F&F(F*F,F.F0F2F$F(F,F0F&F*F.F2F%F'F)F+F-F/F1F3F%F)F-F1F'F+F/F3" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "nops(T1);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#\"#[" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Ca cheSim(T1,8,1,1,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#[" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "CacheSim(T1,8,1,2,false);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#S" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "CacheSim(T1,8,2,1,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#[" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "T2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7R\"\"!\"\"\"\"\"#\"\"$\"\"%\"\"&\" \"'\"\"(F$F(F%F)F&F*F'F+\"\")\"\"*\"#5\"#6\"#7\"#8\"#9\"#:F,F0F-F1F.F2 F/F3F$F,F%F-F&F.F'F/F(F0F)F1F*F2F+F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "CacheSim(T2,8,1,1,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#K" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Cach eSim(T2,8,1,2,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#C" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "CacheSim(T2,8,2,1,true);" }} {PARA 6 "" 1 "" {TEXT -1 49 "Cache size = 8, Associativity = 2, Block \+ size = 1" }}{PARA 6 "" 1 "" {TEXT -1 19 "Number of slots = 4" }}{PARA 6 "" 1 "" {TEXT -1 21 "1-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "2-th address = 1 -> 1" }} {PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "3-th \+ address = 2 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 " " {TEXT -1 21 "4-th address = 3 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "mi ss" }}{PARA 6 "" 1 "" {TEXT -1 21 "5-th address = 4 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "6-th address = 5 -> 1" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "7-th address = 6 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 21 "8-th address = 7 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "9-th address = 0 -> 0 " }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "10 -th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "11-th address = 1 -> 1" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "12-th address = 5 -> 1" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "13-th \+ address = 2 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 22 "14-th address = 6 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 3 "h it" }}{PARA 6 "" 1 "" {TEXT -1 22 "15-th address = 3 -> 3" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "16-th address = 7 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "17-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 22 "18-th address = 9 -> 1" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "19-th address = 10 \+ -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "20-th address = 11 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 23 "21-th address = 12 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "22-th address = 13 \+ -> 1" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "23-th address = 14 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 23 "24-th address = 15 -> 3" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "25-th address = 8 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "26-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "27-th address = 9 -> 1" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "28-th address = 13 -> \+ 1" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "2 9-th address = 10 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 23 "30-th address = 14 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "31-th address = 11 -> 3" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "32-th \+ address = 15 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 22 "33-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "m iss" }}{PARA 6 "" 1 "" {TEXT -1 22 "34-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "35-th address = 1 -> 1" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "36-th address = 9 -> 1" }}{PARA 6 "" 1 "" {TEXT -1 4 "mis s" }}{PARA 6 "" 1 "" {TEXT -1 22 "37-th address = 2 -> 2" }}{PARA 6 " " 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "38-th address \+ = 10 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "39-th address = 3 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "mis s" }}{PARA 6 "" 1 "" {TEXT -1 23 "40-th address = 11 -> 3" }}{PARA 6 " " 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "41-th address \+ = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "42-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 22 "43-th address = 5 -> 1" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "44-th address = 13 \+ -> 1" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "45-th address = 6 -> 2" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 23 "46-th address = 14 -> 2" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "47-th address = 7 - > 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "48-th address = 15 -> 3" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"#K" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "T3 := [0,8,0,8];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %#T3G7&\"\"!\"\")F&F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "Ca cheSim(T3,8,1,1,true);" }}{PARA 6 "" 1 "" {TEXT -1 49 "Cache size = 8, Associativity = 1, Block size = 1" }}{PARA 6 "" 1 "" {TEXT -1 19 "Num ber of slots = 8" }}{PARA 6 "" 1 "" {TEXT -1 21 "1-th address = 0 -> 0 " }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "2 -th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 " " 1 "" {TEXT -1 21 "3-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "4-th address = 8 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\" \"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "CacheSim(T3,4,2,1,tr ue);" }}{PARA 6 "" 1 "" {TEXT -1 49 "Cache size = 4, Associativity = 2 , Block size = 1" }}{PARA 6 "" 1 "" {TEXT -1 19 "Number of slots = 2" }}{PARA 6 "" 1 "" {TEXT -1 21 "1-th address = 0 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "2-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "3-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 21 "4-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 12 "Cach e Misses" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 423 "In this section, we derive a formula for the number of cache miss es. The formula is parameterized by the cache design parameters [size , associativity, and block size]. It takes as input a partition tree \+ describing a WHT algorithm and returns the number of misses that would occur when executed with the given cache configuration. Special case of the formulas are derived for radix two recursive and iterative alg orithms." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 195 "The formula is verified against the cache simulator. Note that t he formula assumes that the address trace contains both read and write accesses as used by the WHT package [see trace generators]." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "Mi sses := proc(l,W,r,C,A,B)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 " loca l n,children, S, N, M, m1, i, n1, N1, Nb1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " children := W[2];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " n := W[1]; S := 2^r; N := 2^n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 93 " if N <= ceil((C/A)/S)*A then return N/ceil(B/S); fi ; # fits in cache (incorrect for B > 1)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 63 " if children = [] then # leaf node that does not fi t in cache" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " if A = 1 and S >= C then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " return 3*N;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " return 2*N/ceil(B/S);" }{TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " M := 0; N1 := 0;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 " for i from 1 to nops(children) do # sum over factors" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 " n1 := c hildren[i][1]; Nb1 := n - N1 - n1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 " m1 := 2^(n-n1)*Misses(N1+l,children[i],Nb1+r,C,A,B); # print (n,n1,m1);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " M := M + m1;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " N1 := N1 + n1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " ret urn M;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'MissesGf*6(%\"lG%\"WG%\"rG%\"CG%\"AG%\"BG6,%\"nG%)ch ildrenG%\"SG%\"NG%\"MG%#m1G%\"iG%#n1G%#N1G%$Nb1G6\"F8C,>8%&9%6#\"\"#>8 $&F=6#\"\"\">8&)F?9&>8')F?FA@$1FJ*&-%%ceilG6#*(9'FD9(!\"\"FFFUFDFTFDO* &FJFD-FP6#*&9)FDFFFUFU@$/F;7\"@%3/FTFD1FSFFO,$*&\"\"$FDFJFDFDO,$*(F?FD FJFDFXFUFD>8(\"\"!>8,Ffo?(8*FDFD-%%nopsG6#F;%%trueGC'>8+&&F;6#FjoFC>8- ,(FAFDFhoFUFapFU>8)*&)F?,&FAFDFapFUFD-F$6(,&FhoFD9$FDFcp,&FfpFDFHFDFSF TFenFD>Feo,&FeoFDFipFD>Fho,&FhoFDFapFDOFeoF8F8F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "W := [5,[ [1,[]] ,[2,[ [1,[]],[1,[]] ]],[2,[] ] ] ];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"WG7$\"\"&7%7$\"\"\"7\"7$ \"\"#7$F(F(7$F,F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintT ree(W);" }}{PARA 6 "" 1 "" {TEXT -1 1 "5" }}{PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Misses(0 ,W,0,8,1,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$c#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Misses(2,[1,[]],2,8,1,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "Misses(1,[1,[]],3,8,1,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# \"\"'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "Misses(1,[2,[[1,[] ],[1,[]]]],2,8,1,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#;" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "TraceWHTRW(W,0,1);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7\\cl\"\"!\"\"\"F$F%\"\"#\"\"$F&F'F$F%F&F'\" \"%\"\"&F(F)\"\"'\"\"(F*F+F(F)F*F+\"\")\"\"*F,F-\"#5\"#6F.F/F,F-F.F/\" #7\"#8F0F1\"#9\"#:F2F3F0F1F2F3\"#;\"#F6F7F4F5F6F7\"#?\"#@ F8F9\"#A\"#BF:F;F8F9F:F;\"#C\"#DFF?FF?\"#G\"#HF@FA\" #I\"#JFBFCF@FAFBFCF$F(F$F(F$F(F,F0F,F0F,F0F$F,F$F,F$F,F(F0F(F0F(F0F%F) F%F)F%F)F-F1F-F1F-F1F%F-F%F-F%F-F)F1F)F1F)F1F&F*F&F*F&F*F.F2F.F2F.F2F& F.F&F.F&F.F*F2F*F2F*F2F'F+F'F+F'F+F/F3F/F3F/F3F'F/F'F/F'F/F+F3F+F3F+F3 F4F8F4F8F4F8FFBF>FBF>FBF6F>F6F>F6F>F:FBF:FB F:FBF7F;F7F;F7F;F?FCF?FCF?FCF7F?F7F?F7F?F;FCF;FCF;FCF$F4F$F4F$F4F%F5F% F5F%F5F&F6F&F6F&F6F'F7F'F7F'F7F(F8F(F8F(F8F)F9F)F9F)F9F*F:F*F:F*F:F+F; F+F;F+F;F,FF.F>F.F>F/F?F/F?F/F?F0F@F0F@F0F@F1 FAF1FAF1FAF2FBF2FBF2FBF3FCF3FCF3FC" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "CacheSim(TraceWHTRW(W,0,1),8,1,1,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$c#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 63 "Verify formula for the case C = 8, A = \+ 1, B = 1 with WHT_\{2^6\}." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "n := 6; Mf := []; Ms := []; C := 8; B := 1; A := 1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#MfG7\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#MsG7\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"\" )" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "S||n := GenExpandedTrees(n):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "for W in S||n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 " mf := Misses(0,W,0,C,A,B): ms := CacheSim(TraceWHTRW(W,0,1),C,A ,B,false):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 55 " if mf <> ms then er ror \"misses not equal\",mf,ms: fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " Mf := [mf,op(Mf)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " Ms \+ := [ms,op(Ms)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "Mf;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7aw\"$o(F$F$\"$S'F$\"$/(F$F$F&F&F&F&F&F&F$F$F$F&F&F$F%F&F$F&F%F%F&F $F%F%F%F%F$F$F&F$F$F%F$F&F&F&F&F&F$F$F&F$F$F$F$F$F$F$F$F&F&F&F&F$F$F%F %F%F%F%F%F$F%F&F&F&F&F&F&F&F&F$F$F&F$F&F$F$F$F$F%F%F&F%F%F&F&F&F$F$F&F $F&F&F$F&F&F&F&F$F$F$F$F$F&F&F$F$F$F$F&F&F&F$F&F$F&F&F%F&F%F$F$F$F$F$F $F$F&F$F$F$F$F$F$F$F&F$F$F&F$F$F&F%F%F%F%F%F$F$F$F$F$F$F&F&F%F%F%F$F$F $F$F&F$F$F%F%F$F&F$F$F&F$F$F&F%F$F&F$F$F&F&F$F$F&F&F$F$F$F$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "Ms;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7aw\"$o(F$F$\"$S'F$\"$/(F$F$F&F&F&F&F&F&F$F$F$F&F&F$F%F &F$F&F%F%F&F$F%F%F%F%F$F$F&F$F$F%F$F&F&F&F&F&F$F$F&F$F$F$F$F$F$F$F$F&F &F&F&F$F$F%F%F%F%F%F%F$F%F&F&F&F&F&F&F&F&F$F$F&F$F&F$F$F$F$F%F%F&F%F%F &F&F&F$F$F&F$F&F&F$F&F&F&F&F$F$F$F$F$F&F&F$F$F$F$F&F&F&F$F&F$F&F&F%F&F %F$F$F$F$F$F$F$F&F$F$F$F$F$F$F$F&F$F$F&F$F$F&F%F%F%F%F%F$F$F$F$F$F$F&F &F%F%F%F$F$F$F$F&F$F$F%F%F$F&F$F$F&F$F$F&F%F$F&F$F$F&F&F$F$F&F&F$F$F$F $" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "\{op(Mf)\}; \{op(Ms) \};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<%\"$S'\"$/(\"$o(" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#<%\"$S'\"$/(\"$o(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 44 "Investigate cache misses as a function of C." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "R := 'R';" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"RGF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " n := 6; A := 1; B := 1; C := 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "S||n : = GenExpandedTrees(n):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "w hile C <= 2^n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " M := []:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " M := [Misses(0,W,0,C,A,B),op(M)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " R[n,C] := \{op(M)\}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " pri nt(\"C = \",C,\"Misses = \",R[n,C]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " C := C * 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"\"#Q*Misses~=~F$<#\"%C5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"\"%Q*Misses~=~F$<$\"$K)\"$'*)" }} {PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"\")Q*Misses~=~F$<%\"$S'\"$/ (\"$o(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#;Q*Misses~=~F$<& \"$[%\"$7&\"$w&\"$S'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#KQ *Misses~=~F$<'\"$c#\"$?$\"$%Q\"$[%\"$7&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#kQ*Misses~=~F$<#F%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "n := 7; A := 1; B := 1; C := 2;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"nG\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG \"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "S||n := GenExpandedTrees(n):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "while C <= 2^n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " M := []:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n d o" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " M := [Misses(0,W,0,C,A,B), op(M)]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 20 " R[n,C] := \{op(M)\}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " print(\"C = \",C,\"Misses = \",R[n,C]);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " C := C * 2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"\"#Q *Misses~=~F$<#\"%KC" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"\"%Q *Misses~=~F$<$\"%[?\"%w@" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\" \"\")Q*Misses~=~F$<%\"%k;\"%#z\"\"%?>" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#;Q*Misses~=~F$<&\"%!G\"\"%39\"%O:\"%k;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#KQ*Misses~=~F$<'\"$'*)\"%C5\"%_6\"%!G \"\"%39" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q%C~=~6\"\"#kQ*Misses~=~F$< (\"$7&\"$S'\"$o(\"$'*)\"%C5\"%_6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q% C~=~6\"\"$G\"Q*Misses~=~F$<#F%" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 99 "Investigate special classes of of algorit hms to find representatives of the different miss classes." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "n := 6; A := 1; B := 1; c := 1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%\"cG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "seq(R[n,2^c ],c=1..n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6(<#\"%C5<$\"$K)\"$'*)<%\" $S'\"$/(\"$o(<&\"$[%\"$7&\"$w&F)<'\"$c#\"$?$\"$%QF-F.<#\"#k" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "seq(Misses(0,GenerateIterati ve([1$n]),0,2^c,1,1),c=1..n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6(\"%C5 \"$'*)\"$o(\"$S'\"$7&\"#k" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "seq(Misses(0,GenerateRightRec([1$n]),0,2^c,1,1),c=1..n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6(\"%C5\"$K)\"$S'\"$[%\"$c#\"#k" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "C := 8; c := 3;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"CG\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"cG \"\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "seq(Misses(0,Gener ateIterative([1$n]),0,C,1,1),n=1..15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "61\"\"#\"\"%\"\")\"#'*\"$)G\"$o(\"%?>\"%3Y\"&_2\"\"&wX#\"&'Hb\"'!) G7\"'O.F\"'C)*e\"(_zF\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 75 " seq(CacheSim(TraceWHTRW(GenerateIterative([1$n]),0,1),C,1,1,false),n=1 ..8);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*\"\"#\"\"%\"\")\"#'*\"$)G\"$o (\"%?>\"%3Y" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "seq((3*(n-c) +c)*2^n,n=4..15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6.\"#'*\"$)G\"$o(\" %?>\"%3Y\"&_2\"\"&wX#\"&'Hb\"'!)G7\"'O.F\"'C)*e\"(_zF\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "seq(Misses(0,GenerateRightRec([1$n] ),0,C,1,1),n=1..15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "61\"\"#\"\"%\"\" )\"#k\"$C#\"$S'\"%k;\"%'4%\"%G(*\"&GD#\"&+7&\"')o9\"\"'_RD\"'cqb\"(;C@ \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 74 "seq(CacheSim(TraceWHT RW(GenerateRightRec([1$n]),0,1),C,1,1,false),n=1..8);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*\"\"#\"\"%\"\")\"#k\"$C#\"$S'\"%k;\"%'4%" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "seq((3*(n-c)+1)*2^n,n=4..15) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6.\"#k\"$C#\"$S'\"%k;\"%'4%\"%G(*\" &GD#\"&+7&\"')o9\"\"'_RD\"'cqb\"(;C@\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "n := 6; c := 1; A := 1; B := 1;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"cG \"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "seq(R[n,2^c],c=1..n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6(<#\"%C5<$\"$K)\"$'*)<%\"$S'\"$/(\"$o(<&\"$[%\"$7&\"$w&F)<'\"$c# \"$?$\"$%QF-F.<#\"#k" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "n := 6;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 51 "General formula to count possible number of misse s." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "for c from 1 to n-1 d o" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " seq(3*(n-c)*2^n+k*2^n,k=1..c );" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"%C5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"$K)\"$'*)" } }{PARA 11 "" 1 "" {XPPMATH 20 "6%\"$S'\"$/(\"$o(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&\"$[%\"$7&\"$w&\"$S'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 '\"$c#\"$?$\"$%Q\"$[%\"$7&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "MissTree := proc(n,c,k)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 " lo cal root, children, i, j;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " root := n; j := c -k + 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 62 " childre n := [seq([1,[]],i=1..n-j),GenerateIterative([1$j])];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " return [root, children];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)MissTreeGf* 6%%\"nG%\"cG%\"kG6&%%rootG%)childrenG%\"iG%\"jG6\"F/C&>8$9$>8',(9%\"\" \"9&!\"\"F8F8>8%7$-%$seqG6$7$F87\"/8&;F8,&F3F8F5F:-%2GenerateIterative G6#7#-%\"$G6$F8F5O7$F2F " 0 "" {MPLTEXT 1 0 21 "T := MissTree(6,3,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"T G7$\"\"'7'7$\"\"\"7\"F(F(F(7$\"\"#7$F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "PrintTree(T);" }}{PARA 6 "" 1 "" {TEXT -1 1 "6" }} {PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1 " }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1 " }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Misses(0,T,0,C,1,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$/(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "n := 6;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "for c from 1 to n-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " seq(3*(n-c)*2^n+k*2^n,k=1..c);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"%C5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6$\"$K)\"$'*)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%\"$S'\"$/(\"$o(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&\"$[ %\"$7&\"$w&\"$S'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'\"$c#\"$?$\"$%Q\"$ [%\"$7&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "for c from 1 to \+ n-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 " seq(Misses(0,MissTree(n ,c,k),0,2^c,A,B),k=1..c);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"%C5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"$K)\"$'*)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6%\"$S'\"$/(\"$o(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6&\"$[%\"$7&\"$w&\"$S'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'\"$c#\"$?$\"$%Q\"$[%\"$7&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 60 "n := 6; Ms := 'Ms'; Mf := 'Mf'; C := 32; B := 1 ; A := 1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#MsGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%# MfGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"#K" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"A G\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "S||n := GenExpan dedTrees(n):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for b from \+ 0 to 3 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " Mf[b] := [];" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " mf := Misses(0,W,0,C,A,2^b):" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 28 " Mf[b] := [mf,op(Mf[b])]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for b from 0 to 3 do" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \{op(Mf[b])\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$c#\"$?$ \"$%Q\"$[%\"$7&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$C#\"$)G\"$_$\" $;%\"$![" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<*\"$3#\"$S#\"$s#\"$/$\"$O $\"$o$\"$+%\"$K%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<.\"$+#\"$;#\"$K# \"$[#\"$k#\"$!G\"$'H\"$7$\"$G$\"$W$\"$g$\"$w$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for b from 0 to 3 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " Ms[b] := [];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " ms := Cac heSim(TraceWHTRW(W,0,1),C,A,2^b,false):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " Ms[b] := [ms,op(Ms[b])]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \{op(Ms[b])\};" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for b from 0 to 3 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \{op(Ms[b])\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$c#\"$?$\"$%Q\"$[%\"$7&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<+\"$C#\"$c#\"$)G\"$?$\"$_$\"$%Q\"$;%\"$[%\" $![" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<0\"$3#\"$C#\"$S#\"$c#\"$s#\"$) G\"$/$\"$?$\"$O$\"$_$\"$o$\"$+%\"$;%\"$K%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<6\"$+#\"$3#\"$;#\"$C#\"$K#\"$S#\"$[#\"$k#\"$s#\"$!G\"$ )G\"$'H\"$/$\"$7$\"$G$\"$O$\"$W$\"$g$\"$o$\"$w$" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 36 "with(stats):\nwith(stats[statplots]):" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[0],area=count,n umbars=20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%- %)POLYGONSG667&7$\"$c#\"\"!7$F(\"#X7$#\"%W8\"\"&F+7$F-F)7&F0F07$#\"%39 F/F)F27&F2F27$#\"%s9F/F)F67&F6F67$#\"%O:F/F)F:7&F:F:7$\"$?$F)F>7&F>7$F ?\"#c7$#\"%k;F/FB7$FDF)7&FFFF7$#\"%GF/FX7$FZF)7&FfnFf n7$#\"%[?F/F)Fhn7&FhnFhn7$#\"%7@F/F)F\\o7&F\\oF\\o7$#\"%w@F/F)F`o7&F`o F`o7$\"$[%F)Fdo7&Fdo7$Feo\"#K7$#\"%/BF/Fho7$FjoF)7&F\\pF\\p7$#\"%oBF/F )F^p7&F^pF^p7$#\"%KCF/F)Fbp7&FbpFbp7$#\"%'\\#F/F)Ffp7&Ffp7$Fgp\"#;7$\" $7&F[q7$F]qF)-%&COLORG6&%$RGBG$\"\"(!\"\"Fcq$\"#5Feq-%%VIEWG6$;$\"0+++ ++SI#!#7$\"0+++++gP&F^r%(DEFAULTG" 1 2 0 1 10 0 2 6 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[1],area=count,numbars=20);" }}{PARA 13 " " 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667&7$\"$C#\" \"!7$F(\"#X7$#\"%%=\"\"\"&F+7$F-F)7&F0F07$#\"%[7F/F)F27&F27$F3\"#G7$# \"%78F/F77$F9F)7&F;F;7$#\"%w8F/F)F=7&F=F=7$\"$)GF)FA7&FA7$FB\"#S7$#\"% /:F/FE7$FGF)7&FIFI7$#\"%o:F/F)FK7&FK7$FL\"#;7$#\"%K;F/FP7$FRF)7&FTFT7$ #\"%'p\"F/F)FV7&FVFV7$\"$_$F)FZ7&FZ7$Fen\"#H7$#\"%C=F/Fhn7$FjnF)7&F\\o F\\o7$#\"%))=F/F)F^o7&F^o7$F_o\"\"*7$#\"%_>F/Fco7$FeoF)7&FgoFgo7$#\"%; ?F/F)Fio7&FioFio7$\"$;%F)F]p7&F]p7$F^p\"#=7$#\"%W@F/Fap7$FcpF)7&FepFep 7$#\"%3AF/F)Fgp7&Fgp7$Fhp\"\"%7$#\"%sAF/F\\q7$F^qF)7&F`qF`q7$#\"%OBF/F )Fbq7&Fbq7$Fcq\"\")7$\"$![Fgq7$FiqF)-%&COLORG6&%$RGBG$\"\"(!\"\"F_r$\" #5Far-%%VIEWG6$;$\"0+++++S)>!#7$\"0+++++g0&Fjr%(DEFAULTG" 1 2 0 1 10 0 2 6 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[2],area=count,numbars= 20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYG ONSG667&7$\"$3#\"\"!7$F(\"#X7$#\"%'4\"\"\"&F+7$F-F)7&F07$F-\"#G7$#\"%_ 6F/F37$F5F)7&F77$F5\"#B7$#\"%37F/F:7$FF>7$#\"%k7F/F)F@7&F@7$FA \"\"%7$\"$k#FE7$FGF)7&FH7$FG\"#D7$#\"%w8F/FK7$FMF)7&FOFO7$#\"%K9F/F)FQ 7&FQ7$FR\"#77$#\"%)[\"F/FV7$FXF)7&FZ7$FX\"#97$#\"%W:F/Fgn7$FinF)7&F[oF [o7$\"$?$F)F]o7&F]o7$F^o\"\"\"7$#\"%c;F/Fao7$FcoF)7&Feo7$FcoFgn7$#\"%7 F/F)F^q7&F^qF^q7$# \"%#*>F/F)Fbq7&Fbq7$Fcq\"\"'7$#\"%[?F/Fgq7$FiqF)7&F[r7$FiqFE7$#\"%/@F/ FE7$F_rF)7&FarF^r7$\"$K%FE7$FdrF)-%&COLORG6&%$RGBG$\"\"(!\"\"Fjr$\"#5F \\s-%%VIEWG6$;$\"0+++++g&=!#7$\"0+++++Sa%Fes%(DEFAULTG" 1 2 0 1 10 0 2 6 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[3],area=count,numbars=20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG66 7&7$\"$+#\"\"!7$F(\"#t7$#\"%W5\"\"&F+7$F-F)7&F07$F-\"#B7$#\"%)3\"F/F37 $F5F)7&F77$F5\"\"%7$#\"%K6F/F:7$F7$F<\"#67$#\"%w6F/FA7$FCF)7&FE 7$FC\"\"$7$\"$W#FH7$FJF)7&FK7$FJ\"\"'7$#\"%k7F/FN7$FPF)7&FRFR7$#\"%38F /F)FT7&FT7$FU\"#<7$#\"%_8F/FY7$FenF)7&Fgn7$FenFA7$#\"%'R\"F/FA7$F[oF)7 &F]o7$F[o\"#57$\"$)GF`o7$FboF)7&Fco7$Fbo\"\"(7$#\"%%[\"F/Ffo7$FhoF)7&F jo7$FhoFH7$#\"%G:F/FH7$F^pF)7&F`p7$F^pF:7$#\"%s:F/F:7$FdpF)7&FfpFfp7$# \"%;;F/F)Fhp7&Fhp7$FipFfo7$\"$K$Ffo7$F^qF)7&F_q7$F^qF/7$#\"%/ " 0 "" {MPLTEXT 1 0 89 "n := 6; Ms := 'Ms'; C := 32; c : = 5; B := 1; A := 1; best := infinity; Mb := 'Mb';" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%# MsGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"#K" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"cG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG \"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bestG%)infinityG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#MbGF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for a fro m 0 to c do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " Ms[a] := []; best := infinity; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n \+ do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " ms := CacheSim(TraceWHTRW (W,0,1),C,2^a,B,false):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " if m s < best then Mb[a] := W; fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " \+ Ms[a] := [ms,op(Ms[a])]:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od: " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 20 "for a from 0 to c do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \{op(Ms[a])\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$c#\"$?$\"$%Q\"$[%\"$7&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$G\"\"$#>\"$c#\"$?$\"$%Q" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<'\"$G\"\"$#>\"$c#\"$?$\"$%Q" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<+\"$C\"\"$G\"\"$)=\"$#>\"$_#\"$c#\"$;$\"$?$\"$%Q" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<1\"$?\"\"$A\"\"$C\"\"$G\"\"$%=\"$'=\" $)=\"$#>\"$[#\"$]#\"$_#\"$c#\"$9$\"$?$\"$%Q" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<5\"$=\"\"$>\"\"$?\"\"$@\"\"$B\"\"$G\"\"$#=\"$$=\"$%=\" $&=\"$(=\"$#>\"$Z#\"$[#\"$\\#\"$c#\"$8$\"$?$\"$%Q" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[0],area=count,numbars=20);" }} {PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667& 7$\"$c#\"\"!7$F(\"#X7$#\"%W8\"\"&F+7$F-F)7&F0F07$#\"%39F/F)F27&F2F27$# \"%s9F/F)F67&F6F67$#\"%O:F/F)F:7&F:F:7$\"$?$F)F>7&F>7$F?\"#c7$#\"%k;F/ FB7$FDF)7&FFFF7$#\"%GF/FX7$FZF)7&FfnFfn7$#\"%[?F/F)Fh n7&FhnFhn7$#\"%7@F/F)F\\o7&F\\oF\\o7$#\"%w@F/F)F`o7&F`oF`o7$\"$[%F)Fdo 7&Fdo7$Feo\"#K7$#\"%/BF/Fho7$FjoF)7&F\\pF\\p7$#\"%oBF/F)F^p7&F^pF^p7$# \"%KCF/F)Fbp7&FbpFbp7$#\"%'\\#F/F)Ffp7&Ffp7$Fgp\"#;7$\"$7&F[q7$F]qF)-% &COLORG6&%$RGBG$\"\"(!\"\"Fcq$\"#5Feq-%%VIEWG6$;$\"0+++++SI#!#7$\"0+++ ++gP&F^r%(DEFAULTG" 1 2 0 1 10 0 2 6 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 " histogram(Ms[1],area=count,numbars=20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667&7$\"$G\"\"\"!7$F(\"#X7$#\"$ /(\"\"&F+7$F-F)7&F0F07$#\"$o(F/F)F27&F2F27$#\"$K)F/F)F67&F6F67$#\"$'*) F/F)F:7&F:F:7$\"$#>F)F>7&F>7$F?\"#c7$#\"%C5F/FB7$FDF)7&FFFF7$#\"%)3\"F /F)FH7&FHFH7$#\"%_6F/F)FL7&FLFL7$#\"%;7F/F)FP7&FPFP7$\"$c#F)FT7&FT7$FU \"#[7$#\"%W8F/FX7$FZF)7&FfnFfn7$#\"%39F/F)Fhn7&FhnFhn7$#\"%s9F/F)F\\o7 &F\\oF\\o7$#\"%O:F/F)F`o7&F`oF`o7$\"$?$F)Fdo7&Fdo7$Feo\"#K7$#\"%k;F/Fh o7$FjoF)7&F\\pF\\p7$#\"%G " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[2],area=count,n umbars=20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%- %)POLYGONSG667&7$\"$G\"\"\"!7$F(\"#c7$#\"$/(\"\"&F+7$F-F)7&F0F07$#\"$o (F/F)F27&F2F27$#\"$K)F/F)F67&F6F67$#\"$'*)F/F)F:7&F:F:7$\"$#>F)F>7&F>7 $F?\"#f7$#\"%C5F/FB7$FDF)7&FFFF7$#\"%)3\"F/F)FH7&FHFH7$#\"%_6F/F)FL7&F LFL7$#\"%;7F/F)FP7&FPFP7$\"$c#F)FT7&FT7$FU\"#Y7$#\"%W8F/FX7$FZF)7&FfnF fn7$#\"%39F/F)Fhn7&FhnFhn7$#\"%s9F/F)F\\o7&F\\oF\\o7$#\"%O:F/F)F`o7&F` oF`o7$\"$?$F)Fdo7&Fdo7$Feo\"#G7$#\"%k;F/Fho7$FjoF)7&F\\pF\\p7$#\"%G " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[3],area=count,numbars=20);" }}{PARA 13 " " 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667&7$\"$C\"\" \"!7$F(\"#l7$\"$P\"F+7$F-F)7&F.F.7$\"$]\"F)F07&F0F07$\"$j\"F)F37&F3F37 $\"$w\"F)F67&F67$F7\"#A7$\"$*=F:7$F$F^o7$F`oF)7&FaoF_o7$\"$K$F^o7$Fdo F)7&FeoFeo7$\"$X$F)Fgo7&FgoFgo7$\"$e$F)Fjo7&FjoFjo7$\"$r$F)F]p7&F]p7$F ^p\"\"%7$\"$%QFap7$FcpF)-%&COLORG6&%$RGBG$\"\"(!\"\"Fip$\"#5F[q-%%VIEW G6$;$\"#)*F)$\"$5%F)%(DEFAULTG" 1 2 0 1 10 0 2 6 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "histogram(Ms[4],area=count,numbars=20);" }}{PARA 13 " " 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667&7$\"$?\"\" \"!7$F(\"#w7$#\"$m'\"\"&F+7$F-F)7&F0F07$#\"$K(F/F)F27&F2F27$#\"$)zF/F) F67&F6F67$#\"$k)F/F)F:7&F:7$F;\"\"$7$\"$'=F?7$FAF)7&FB7$FA\"#x7$#\"$'* *F/FE7$FGF)7&FIFI7$#\"%i5F/F)FK7&FKFK7$#\"%G6F/F)FO7&FOFO7$#\"%%>\"F/F )FS7&FS7$FT\"#97$\"$_#FX7$FZF)7&Fen7$FZ\"#;7$#\"%E8F/Fhn7$FjnF)7&F\\oF \\o7$#\"%#R\"F/F)F^o7&F^oF^o7$#\"%e9F/F)Fbo7&FboFbo7$#\"%C:F/F)Ffo7&Ff o7$Fgo\"\"%7$\"$=$F[p7$F]pF)7&F^p7$F]pF/7$#\"%c;F/F/7$FbpF)7&FdpFdp7$# \"%A " 0 " " {MPLTEXT 1 0 39 "histogram(Ms[5],area=count,numbars=20);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6%-%)POLYGONSG667&7$\"$= \"\"\"!7$F(\"$@\"7$#\"%88\"#5F+7$F-F)7&F0F07$#\"$B(\"\"&F)F27&F2F27$# \"%z:F/F)F77&F7F77$#\"$c)F5F)F;7&F;7$F " 0 "" {MPLTEXT 1 0 32 "W := GenerateIterative([1$n]); " }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"WG7$\"\"'7(7$\"\"\"7\"F(F(F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "C; c; B;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#K" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "CacheSim(TraceWHTRW(W,0,1),C,2^c,B,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$%Q" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "CacheSim(TraceWHTRW(W,0,1),C,2^0,B,false);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#\"$7&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "W := GenerateRightRec([1$n]); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" WG7$\"\"'7$7$\"\"\"7\"7$\"\"&7$F(7$\"\"%7$F(7$\"\"$7$F(7$\"\"#7$F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "C; c; B;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#K" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "CacheSim(TraceWHTRW(W,0,1),C,2^c,B,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$G\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "CacheSim(TraceWHTRW(W,0,1),C,2^0,B,false);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"$c#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "Mb[c];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"'7$7$\"\"\"7\"7 $\"\"&7%7$\"\"$7$F&7$\"\"#7$F&F&F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "PrintTree(Mb[c]);" }}{PARA 6 "" 1 "" {TEXT -1 1 "6" } }{PARA 6 "" 1 "" {TEXT -1 3 " 5" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1 " }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " \+ 3" }}{PARA 6 "" 1 "" {TEXT -1 7 " 2" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 "" 1 "" {TEXT -1 9 " 1" }}{PARA 6 " " 1 "" {TEXT -1 7 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " 1" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 88 "n := 4; Ms := 'Ms'; C := 8 ; c := 3; B := 1; A := 1; best := infinity; Mb := 'Mb';" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#MsGF$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"CG\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"cG\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG\"\"\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bestG%)infinityG" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#MbGF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "S||n := GenExpandedTrees(n);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>% #S4G<-7$\"\"%7$7$\"\"\"7\"7$\"\"$7$7$\"\"#7$F)F)F)7$F'7%F/F)F)7$F'7$F) 7$F-7$F)F/7$F'7$F)7$F-7%F)F)F)7$F'7%F)F/F)7$F'7$F:F)7$F'7$F,F)7$F'7&F) F)F)F)7$F'7%F)F)F/7$F'7$F6F)7$F'7$F/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for a from 0 to c do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " Ms[a] := []; best := infinity; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " for W in S||n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " ms := CacheSim(TraceWHTRW(W,0,1),C,2^a,B,false):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " if ms < best then Mb[a] := W; fi:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " Ms[a] := [ms,op(Ms[a])]:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for a from 0 \+ to c do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \{op(Ms[a])\};" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<%\"#k\"#!)\"#'*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<%\"#K\"#[\"#k " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<%\"#K\"#[\"#k" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#<'\"#J\"#K\"#Z\"#[\"#k" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "PrintTree(Mb[c]);" }}{PARA 6 "" 1 "" {TEXT -1 1 "4" } }{PARA 6 "" 1 "" {TEXT -1 3 " 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1 " }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 3 " \+ 2" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}{PARA 6 "" 1 "" {TEXT -1 5 " 1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "CacheSim(TraceWHT RW(Mb[c],0,1),C,2^c,B,true);" }}{PARA 6 "" 1 "" {TEXT -1 49 "Cache siz e = 8, Associativity = 8, Block size = 1" }}{PARA 6 "" 1 "" {TEXT -1 19 "Number of slots = 1" }}{PARA 6 "" 1 "" {TEXT -1 21 "1-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "2-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 21 "3-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 21 "4-th address = 1 -> 0 " }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 21 "5- th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 21 "6-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 21 "7-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "8-th address \+ = 3 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 21 "9-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 22 "10-th address = 3 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "11-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 " 12-th address = 3 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 22 "13-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "14-th address = 2 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "15-th \+ address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 22 "16-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "h it" }}{PARA 6 "" 1 "" {TEXT -1 22 "17-th address = 0 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "18-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "19-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 22 "20-th address = 3 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "21-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 " 22-th address = 3 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 22 "23-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "24-th address = 3 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "25-th \+ address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 " " {TEXT -1 22 "26-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "m iss" }}{PARA 6 "" 1 "" {TEXT -1 22 "27-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "28-th address \+ = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "29-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 22 "30-th address = 5 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "31-th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "32-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "33-th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "34-th address = 7 -> 0 " }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "35 -th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "36-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "37-th address = 4 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "38-th \+ address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 22 "39-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "h it" }}{PARA 6 "" 1 "" {TEXT -1 22 "40-th address = 6 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "41-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "42-th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 22 "43-th address = 5 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "44-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 " 45-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 22 "46-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "47-th address = 5 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "48-th \+ address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 22 "49-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "m iss" }}{PARA 6 "" 1 "" {TEXT -1 22 "50-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "51-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "52-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 22 "53-th address = 8 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "54-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 " 55-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "56-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "57-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 " 58-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "59-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "60-th address = 11 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "61-th \+ address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 23 "62-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 " hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "63-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "64-th address \+ = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "65-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "66-th address = 10 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "67-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 " 68-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "69-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "70-th address = 11 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "71-th \+ address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 23 "72-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 " hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "73-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "74-th addre ss = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "75-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hi t" }}{PARA 6 "" 1 "" {TEXT -1 23 "76-th address = 13 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "77-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "78-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "79-th address = 14 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "80-th address = 15 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "81-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "82-th address = 15 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "83-th address = 14 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "84-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "85-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "86-th address = 14 -> \+ 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "8 7-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 23 "88-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "89-th address = 12 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "90-th \+ address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 23 "91-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 " hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "92-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "93-th addres s = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "94-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hi t" }}{PARA 6 "" 1 "" {TEXT -1 23 "95-th address = 13 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "96-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 22 "97-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 22 "98-th address = 4 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 22 "99-th address = 0 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "100-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "101-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "102-th address = 4 -> \+ 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "1 03-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 "104-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "105-th address = 8 -> \+ 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "1 06-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "107-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "108-th address = 12 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "109-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 23 "110-th address = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 " hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "111-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "112-th addre ss = 8 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "113-th address = 0 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hi t" }}{PARA 6 "" 1 "" {TEXT -1 23 "114-th address = 8 -> 0" }}{PARA 6 " " 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "115-th address \+ = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "116-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "117-th address = 4 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "118-th address = 12 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "119-th address = 4 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "120-th address = 12 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "121-th address = 1 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "122-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }} {PARA 6 "" 1 "" {TEXT -1 23 "123-th address = 1 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "124-th address = 5 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "125-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "126-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "127-th address = 9 -> \+ 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 " 128-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "129-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "130-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 " 131-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "132-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "133-th address = 1 -> \+ 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "1 34-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 " " 1 "" {TEXT -1 23 "135-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "136-th address = 9 -> 0" }} {PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "137-th address = 1 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 " " {TEXT -1 23 "138-th address = 9 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 " hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "139-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "140-th addre ss = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "141-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hi t" }}{PARA 6 "" 1 "" {TEXT -1 24 "142-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "143-th address = 5 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "144-th address = 13 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "145-th address = 2 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "146-th address = 6 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "147-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "148-th address = 6 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "149-th address = 2 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "150-th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "151-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 "152-th address = 14 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 "153-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "154-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "155-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "156-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "157-th address = 2 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "158-th address = 10 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "159-th address = 2 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "160-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "161-th address = 2 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "162-th address = 10 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "163-th address = 6 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "164-th address = 14 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "165-th address = 6 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "166-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "167-th address = 6 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "168-th address = 14 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "169-th address = 3 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "170-th address = 7 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 23 "171-th address = 3 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "172-th address = 7 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "173-th address = 3 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "174-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "175-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 "176-th address = 15 - > 0" }}{PARA 6 "" 1 "" {TEXT -1 4 "miss" }}{PARA 6 "" 1 "" {TEXT -1 24 "177-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "178-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "179-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "180-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "181-th address = 3 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "182-th address = 11 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "183-th address = 3 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "184-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "185-th address = 3 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "186-th address = 11 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 23 "187-th address = 7 -> 0" }}{PARA 6 "" 1 " " {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "188-th address = 15 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "189-th address = 7 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 6 "" 1 "" {TEXT -1 24 "190-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 23 "191-th address = 7 \+ -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }}{PARA 6 "" 1 "" {TEXT -1 24 "192-th address = 15 -> 0" }}{PARA 6 "" 1 "" {TEXT -1 3 "hit" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"#J" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{MARK "13 91 210 0" 3 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }