3 # Copyright (c) 2009, 2014. The SimGrid Team.
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the license (GNU LGPL) which comes with this package.
12 print "<job id=\"$_[0]\" namespace=\"$_[1]\" name=\"$_[2]\" version=\"1.0\" runtime=\"$_[3]\">\n";
15 print " <uses file=\"$_[0]\" link=\"$_[1]\" register=\"true\" transfer=\"true\" optional=\"false\" type=\"data\" size=\"$_[2]\"/>\n";
19 my $max_level=shift||1;
24 if ($level<$max_level) {
25 die "Recursive Strassen don't work yet\n";
28 my $sizeAdd=$matSize*$matSize/4;
29 my $sizeMult=$matSize*$matSize*$matSize/8;
30 my $sizeBlock=$sizeAdd;
33 job("T1","Strassen","l$level",$sizeAdd);
34 file("${A}11l$level","input",$sizeBlock);
35 file("${A}22l$level","input",$sizeBlock);
36 file("T1l$level","output",$sizeBlock);
40 job("T2","Strassen","l$level",$sizeAdd);
41 file("${A}21l$level","input",$sizeBlock);
42 file("${A}22l$level","input",$sizeBlock);
43 file("T2l$level","output",$sizeBlock);
47 job("T3","Strassen","l$level",$sizeAdd);
48 file("${A}11l$level","input",$sizeBlock);
49 file("${A}12l$level","input",$sizeBlock);
50 file("T3l$level","output",$sizeBlock);
54 job("T4","Strassen","l$level",$sizeAdd);
55 file("${A}21l$level","input",$sizeBlock);
56 file("${A}11l$level","input",$sizeBlock);
57 file("T4l$level","output",$sizeBlock);
61 job("T5","Strassen","l$level",$sizeAdd);
62 file("${A}12l$level","input",$sizeBlock);
63 file("${A}22l$level","input",$sizeBlock);
64 file("T5l$level","output",$sizeBlock);
68 job("T6","Strassen","l$level",$sizeAdd);
69 file("${B}11l$level","input",$sizeBlock);
70 file("${B}22l$level","input",$sizeBlock);
71 file("T6l$level","output",$sizeBlock);
75 job("T7","Strassen","l$level",$sizeAdd);
76 file("${B}12l$level","input",$sizeBlock);
77 file("${B}22l$level","input",$sizeBlock);
78 file("T7l$level","output",$sizeBlock);
82 job("T8","Strassen","l$level",$sizeAdd);
83 file("${B}21l$level","input",$sizeBlock);
84 file("${B}11l$level","input",$sizeBlock);
85 file("T8l$level","output",$sizeBlock);
89 job("T9","Strassen","l$level",$sizeAdd);
90 file("${B}11l$level","input",$sizeBlock);
91 file("${B}12l$level","input",$sizeBlock);
92 file("T9l$level","output",$sizeBlock);
96 job("T10","Strassen","l$level",$sizeAdd);
97 file("${B}21l$level","input",$sizeBlock);
98 file("${B}22l$level","input",$sizeBlock);
99 file("T10l$level","output",$sizeBlock);
103 if ($level<$max_level) {
104 strassen($sizeBlock,$max_level,$level+1,"T1_","T6_");
106 job("Q1","Strassen","l$level",$sizeMult);
107 file("T1l$level","input",$sizeBlock);
108 file("T6l$level","input",$sizeBlock);
109 file("Q1l$level","output",$sizeBlock);
114 if ($level<$max_level) {
115 strassen($sizeBlock,$max_level,$level+1,"T2_","B11_");
117 job("Q2","Strassen","l$level",$sizeMult);
118 file("T2l$level","input",$sizeBlock);
119 file("${B}11l$level","input",$sizeBlock);
120 file("Q2l$level","output",$sizeBlock);
125 if ($level<$max_level) {
126 strassen($sizeBlock,$max_level,$level+1,"A11_","T7_");
128 job("Q3","Strassen","l$level",$sizeMult);
129 file("${A}11l$level","input",$sizeBlock);
130 file("T7l$level","input",$sizeBlock);
131 file("Q3l$level","output",$sizeBlock);
136 if ($level<$max_level) {
137 strassen($sizeBlock,$max_level,$level+1,"A22_","T8_");
139 job("Q4","Strassen","l$level",$sizeMult);
140 file("${A}22l$level","input",$sizeBlock);
141 file("T8l$level","input",$sizeBlock);
142 file("Q4l$level","output",$sizeBlock);
147 if ($level<$max_level) {
148 strassen($sizeBlock,$max_level,$level+1,"T3_","B22_");
150 job("Q5","Strassen","l$level",$sizeMult);
151 file("T3l$level","input",$sizeBlock);
152 file("${B}22l$level","input",$sizeBlock);
153 file("Q5l$level","output",$sizeBlock);
158 if ($level<$max_level) {
159 strassen($sizeBlock,$max_level,$level+1,"T4_","T9_");
161 job("Q6","Strassen","l$level",$sizeMult);
162 file("T4l$level","input",$sizeBlock);
163 file("T9l$level","input",$sizeBlock);
164 file("Q6l$level","output",$sizeBlock);
169 if ($level<$max_level) {
170 strassen($sizeBlock,$max_level,$level+1,"T5_","T10_");
172 job("Q7","Strassen","l$level",$sizeMult);
173 file("T5l$level","input",$sizeBlock);
174 file("T10l$level","input",$sizeBlock);
175 file("Q7l$level","output",$sizeBlock);
179 # C11 = Q1 + Q4 − Q5 + Q7
180 job("Q11","Strassen","l$level",$sizeAdd*3);
181 file("Q1l$level","input",$sizeBlock);
182 file("Q4l$level","input",$sizeBlock);
183 file("Q5l$level","input",$sizeBlock);
184 file("Q7l$level","input",$sizeBlock);
185 file("C11l$level","output",$sizeBlock);
189 job("C12","Strassen","l$level",$sizeAdd);
190 file("Q3l$level","input",$sizeBlock);
191 file("Q5l$level","input",$sizeBlock);
192 file("C12l$level","output",$sizeBlock);
196 job("C21","Strassen","l$level",$sizeAdd);
197 file("Q2l$level","input",$sizeBlock);
198 file("Q4l$level","input",$sizeBlock);
199 file("C21l$level","output",$sizeBlock);
202 # C22 = Q1 − Q2 + Q3 + Q6
203 job("C22","Strassen","l$level",$sizeMult);
204 file("Q1l$level","input",$sizeBlock);
205 file("Q2l$level","input",$sizeBlock);
206 file("Q3l$level","input",$sizeBlock);
207 file("Q6l$level","input",$sizeBlock);
208 file("C22l$level","output",$sizeBlock);
212 print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
213 print "<!-- generated: ".(localtime())." -->\n";
214 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";