6 print "<job id=\"$_[0]\" namespace=\"$_[1]\" name=\"$_[2]\" version=\"1.0\" runtime=\"$_[3]\">\n";
9 print " <uses file=\"$_[0]\" link=\"$_[1]\" register=\"true\" transfer=\"true\" optional=\"false\" type=\"data\" size=\"$_[2]\"/>\n";
13 my $max_level=shift||1;
18 if ($level<$max_level) {
19 die "Recursive Strassen don't work yet\n";
22 my $sizeAdd=$matSize*$matSize/4;
23 my $sizeMult=$matSize*$matSize*$matSize/8;
24 my $sizeBlock=$sizeAdd;
27 job("T1","Strassen","l$level",$sizeAdd);
28 file("${A}11l$level","input",$sizeBlock);
29 file("${A}22l$level","input",$sizeBlock);
30 file("T1l$level","output",$sizeBlock);
34 job("T2","Strassen","l$level",$sizeAdd);
35 file("${A}21l$level","input",$sizeBlock);
36 file("${A}22l$level","input",$sizeBlock);
37 file("T2l$level","output",$sizeBlock);
41 job("T3","Strassen","l$level",$sizeAdd);
42 file("${A}11l$level","input",$sizeBlock);
43 file("${A}12l$level","input",$sizeBlock);
44 file("T3l$level","output",$sizeBlock);
48 job("T4","Strassen","l$level",$sizeAdd);
49 file("${A}21l$level","input",$sizeBlock);
50 file("${A}11l$level","input",$sizeBlock);
51 file("T4l$level","output",$sizeBlock);
55 job("T5","Strassen","l$level",$sizeAdd);
56 file("${A}12l$level","input",$sizeBlock);
57 file("${A}22l$level","input",$sizeBlock);
58 file("T5l$level","output",$sizeBlock);
62 job("T6","Strassen","l$level",$sizeAdd);
63 file("${B}11l$level","input",$sizeBlock);
64 file("${B}22l$level","input",$sizeBlock);
65 file("T6l$level","output",$sizeBlock);
69 job("T7","Strassen","l$level",$sizeAdd);
70 file("${B}12l$level","input",$sizeBlock);
71 file("${B}22l$level","input",$sizeBlock);
72 file("T7l$level","output",$sizeBlock);
76 job("T8","Strassen","l$level",$sizeAdd);
77 file("${B}21l$level","input",$sizeBlock);
78 file("${B}11l$level","input",$sizeBlock);
79 file("T8l$level","output",$sizeBlock);
83 job("T9","Strassen","l$level",$sizeAdd);
84 file("${B}11l$level","input",$sizeBlock);
85 file("${B}12l$level","input",$sizeBlock);
86 file("T9l$level","output",$sizeBlock);
90 job("T10","Strassen","l$level",$sizeAdd);
91 file("${B}21l$level","input",$sizeBlock);
92 file("${B}22l$level","input",$sizeBlock);
93 file("T10l$level","output",$sizeBlock);
97 if ($level<$max_level) {
98 strassen($sizeBlock,$max_level,$level+1,"T1_","T6_");
100 job("Q1","Strassen","l$level",$sizeMult);
101 file("T1l$level","input",$sizeBlock);
102 file("T6l$level","input",$sizeBlock);
103 file("Q1l$level","output",$sizeBlock);
108 if ($level<$max_level) {
109 strassen($sizeBlock,$max_level,$level+1,"T2_","B11_");
111 job("Q2","Strassen","l$level",$sizeMult);
112 file("T2l$level","input",$sizeBlock);
113 file("${B}11l$level","input",$sizeBlock);
114 file("Q2l$level","output",$sizeBlock);
119 if ($level<$max_level) {
120 strassen($sizeBlock,$max_level,$level+1,"A11_","T7_");
122 job("Q3","Strassen","l$level",$sizeMult);
123 file("${A}11l$level","input",$sizeBlock);
124 file("T7l$level","input",$sizeBlock);
125 file("Q3l$level","output",$sizeBlock);
130 if ($level<$max_level) {
131 strassen($sizeBlock,$max_level,$level+1,"A22_","T8_");
133 job("Q4","Strassen","l$level",$sizeMult);
134 file("${A}22l$level","input",$sizeBlock);
135 file("T8l$level","input",$sizeBlock);
136 file("Q4l$level","output",$sizeBlock);
141 if ($level<$max_level) {
142 strassen($sizeBlock,$max_level,$level+1,"T3_","B22_");
144 job("Q5","Strassen","l$level",$sizeMult);
145 file("T3l$level","input",$sizeBlock);
146 file("${B}22l$level","input",$sizeBlock);
147 file("Q5l$level","output",$sizeBlock);
152 if ($level<$max_level) {
153 strassen($sizeBlock,$max_level,$level+1,"T4_","T9_");
155 job("Q6","Strassen","l$level",$sizeMult);
156 file("T4l$level","input",$sizeBlock);
157 file("T9l$level","input",$sizeBlock);
158 file("Q6l$level","output",$sizeBlock);
163 if ($level<$max_level) {
164 strassen($sizeBlock,$max_level,$level+1,"T5_","T10_");
166 job("Q7","Strassen","l$level",$sizeMult);
167 file("T5l$level","input",$sizeBlock);
168 file("T10l$level","input",$sizeBlock);
169 file("Q7l$level","output",$sizeBlock);
173 # C11 = Q1 + Q4 − Q5 + Q7
174 job("Q11","Strassen","l$level",$sizeAdd*3);
175 file("Q1l$level","input",$sizeBlock);
176 file("Q4l$level","input",$sizeBlock);
177 file("Q5l$level","input",$sizeBlock);
178 file("Q7l$level","input",$sizeBlock);
179 file("C11l$level","output",$sizeBlock);
183 job("C12","Strassen","l$level",$sizeAdd);
184 file("Q3l$level","input",$sizeBlock);
185 file("Q5l$level","input",$sizeBlock);
186 file("C12l$level","output",$sizeBlock);
190 job("C21","Strassen","l$level",$sizeAdd);
191 file("Q2l$level","input",$sizeBlock);
192 file("Q4l$level","input",$sizeBlock);
193 file("C21l$level","output",$sizeBlock);
196 # C22 = Q1 − Q2 + Q3 + Q6
197 job("C22","Strassen","l$level",$sizeMult);
198 file("Q1l$level","input",$sizeBlock);
199 file("Q2l$level","input",$sizeBlock);
200 file("Q3l$level","input",$sizeBlock);
201 file("Q6l$level","input",$sizeBlock);
202 file("C22l$level","output",$sizeBlock);
206 print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
207 print "<!-- generated: ".(localtime())." -->\n";
208 print "<adag xmlns=\"http://pegasus.isi.edu/schema/DAX\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://pegasus.isi.edu/schema/DAX http://pegasus.isi.edu/schema/dax-2.1.xsd\" version=\"2.1\" count=\"1\" index=\"0\" name=\"test\" jobCount=\"25\" fileCount=\"0\" childCount=\"20\">\n";