X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/67ebbc00442335b3f92177183bbbbb4574e35bf0..e885600424498cc63c1f62b5e0510626dcbe1fc2:/examples/simdag/dax/generate_strassen.pl
diff --git a/examples/simdag/dax/generate_strassen.pl b/examples/simdag/dax/generate_strassen.pl
new file mode 100755
index 0000000000..0166b14b9b
--- /dev/null
+++ b/examples/simdag/dax/generate_strassen.pl
@@ -0,0 +1,213 @@
+#! /usr/bin/perl
+
+use strict;
+
+sub job {
+ print "\n";
+}
+sub file {
+ print " \n";
+}
+sub strassen {
+ my $matSize=shift;
+ my $max_level=shift||1;
+ my $level=shift||1;
+ my $A = shift||"A";
+ my $B = shift||"B";
+
+ if ($level<$max_level) {
+ die "Recursive Strassen don't work yet\n";
+ }
+
+ my $sizeAdd=$matSize*$matSize/4;
+ my $sizeMult=$matSize*$matSize*$matSize/8;
+ my $sizeBlock=$sizeAdd;
+
+ # T1 = A11 + A22
+ job("T1","Strassen","l$level",$sizeAdd);
+ file("${A}11l$level","input",$sizeBlock);
+ file("${A}22l$level","input",$sizeBlock);
+ file("T1l$level","output",$sizeBlock);
+ print("\n");
+
+ # T2 = A21 + A22
+ job("T2","Strassen","l$level",$sizeAdd);
+ file("${A}21l$level","input",$sizeBlock);
+ file("${A}22l$level","input",$sizeBlock);
+ file("T2l$level","output",$sizeBlock);
+ print("\n");
+
+ # T3 = A11 + A12
+ job("T3","Strassen","l$level",$sizeAdd);
+ file("${A}11l$level","input",$sizeBlock);
+ file("${A}12l$level","input",$sizeBlock);
+ file("T3l$level","output",$sizeBlock);
+ print("\n");
+
+ # T4 = A21 â A11
+ job("T4","Strassen","l$level",$sizeAdd);
+ file("${A}21l$level","input",$sizeBlock);
+ file("${A}11l$level","input",$sizeBlock);
+ file("T4l$level","output",$sizeBlock);
+ print("\n");
+
+ # T5 = A12 â A22
+ job("T5","Strassen","l$level",$sizeAdd);
+ file("${A}12l$level","input",$sizeBlock);
+ file("${A}22l$level","input",$sizeBlock);
+ file("T5l$level","output",$sizeBlock);
+ print("\n");
+
+ # T6 = B11 + B22
+ job("T6","Strassen","l$level",$sizeAdd);
+ file("${B}11l$level","input",$sizeBlock);
+ file("${B}22l$level","input",$sizeBlock);
+ file("T6l$level","output",$sizeBlock);
+ print("\n");
+
+ # T7 = B12 â B22
+ job("T7","Strassen","l$level",$sizeAdd);
+ file("${B}12l$level","input",$sizeBlock);
+ file("${B}22l$level","input",$sizeBlock);
+ file("T7l$level","output",$sizeBlock);
+ print("\n");
+
+ # T8 = B21 â B11
+ job("T8","Strassen","l$level",$sizeAdd);
+ file("${B}21l$level","input",$sizeBlock);
+ file("${B}11l$level","input",$sizeBlock);
+ file("T8l$level","output",$sizeBlock);
+ print("\n");
+
+ # T9 = B11 + B12
+ job("T9","Strassen","l$level",$sizeAdd);
+ file("${B}11l$level","input",$sizeBlock);
+ file("${B}12l$level","input",$sizeBlock);
+ file("T9l$level","output",$sizeBlock);
+ print("\n");
+
+ # T10 = B21 + B22
+ job("T10","Strassen","l$level",$sizeAdd);
+ file("${B}21l$level","input",$sizeBlock);
+ file("${B}22l$level","input",$sizeBlock);
+ file("T10l$level","output",$sizeBlock);
+ print("\n");
+
+ # Q1 = T1 Ã T6
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"T1_","T6_");
+ } else {
+ job("Q1","Strassen","l$level",$sizeMult);
+ file("T1l$level","input",$sizeBlock);
+ file("T6l$level","input",$sizeBlock);
+ file("Q1l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q2 = T2 Ã B11
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"T2_","B11_");
+ } else {
+ job("Q2","Strassen","l$level",$sizeMult);
+ file("T2l$level","input",$sizeBlock);
+ file("${B}11l$level","input",$sizeBlock);
+ file("Q2l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q3 = A11 Ã T7
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"A11_","T7_");
+ } else {
+ job("Q3","Strassen","l$level",$sizeMult);
+ file("${A}11l$level","input",$sizeBlock);
+ file("T7l$level","input",$sizeBlock);
+ file("Q3l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q4 = A22 Ã T8
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"A22_","T8_");
+ } else {
+ job("Q4","Strassen","l$level",$sizeMult);
+ file("${A}22l$level","input",$sizeBlock);
+ file("T8l$level","input",$sizeBlock);
+ file("Q4l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q5 = T3 Ã B22
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"T3_","B22_");
+ } else {
+ job("Q5","Strassen","l$level",$sizeMult);
+ file("T3l$level","input",$sizeBlock);
+ file("${B}22l$level","input",$sizeBlock);
+ file("Q5l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q6 = T4 Ã T9
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"T4_","T9_");
+ } else {
+ job("Q6","Strassen","l$level",$sizeMult);
+ file("T4l$level","input",$sizeBlock);
+ file("T9l$level","input",$sizeBlock);
+ file("Q6l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # Q7 = T5 Ã T10
+ if ($level<$max_level) {
+ strassen($sizeBlock,$max_level,$level+1,"T5_","T10_");
+ } else {
+ job("Q7","Strassen","l$level",$sizeMult);
+ file("T5l$level","input",$sizeBlock);
+ file("T10l$level","input",$sizeBlock);
+ file("Q7l$level","output",$sizeBlock);
+ print("\n");
+ }
+
+ # C11 = Q1 + Q4 â Q5 + Q7
+ job("Q11","Strassen","l$level",$sizeAdd*3);
+ file("Q1l$level","input",$sizeBlock);
+ file("Q4l$level","input",$sizeBlock);
+ file("Q5l$level","input",$sizeBlock);
+ file("Q7l$level","input",$sizeBlock);
+ file("C11l$level","output",$sizeBlock);
+ print("\n");
+
+ # C12 = Q3 + Q5
+ job("C12","Strassen","l$level",$sizeAdd);
+ file("Q3l$level","input",$sizeBlock);
+ file("Q5l$level","input",$sizeBlock);
+ file("C12l$level","output",$sizeBlock);
+ print("\n");
+
+ # C21 = Q2 + Q4
+ job("C21","Strassen","l$level",$sizeAdd);
+ file("Q2l$level","input",$sizeBlock);
+ file("Q4l$level","input",$sizeBlock);
+ file("C21l$level","output",$sizeBlock);
+ print("\n");
+
+ # C22 = Q1 â Q2 + Q3 + Q6
+ job("C22","Strassen","l$level",$sizeMult);
+ file("Q1l$level","input",$sizeBlock);
+ file("Q2l$level","input",$sizeBlock);
+ file("Q3l$level","input",$sizeBlock);
+ file("Q6l$level","input",$sizeBlock);
+ file("C22l$level","output",$sizeBlock);
+ print("\n");
+}
+
+print "\n";
+print "\n";
+print "\n";
+
+strassen(2000);
+
+print "\n";
+