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"; +