Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Putting it here in the meantime.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 22 May 2006 16:35:23 +0000 (16:35 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 22 May 2006 16:35:23 +0000 (16:35 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2279 48e7efb5-ca39-0410-a469-dd3cf9ba447f

tools/platform_generation/tiers_simgrid_remi.pl [new file with mode: 0755]

diff --git a/tools/platform_generation/tiers_simgrid_remi.pl b/tools/platform_generation/tiers_simgrid_remi.pl
new file mode 100755 (executable)
index 0000000..dc43a24
--- /dev/null
@@ -0,0 +1,485 @@
+#!/usr/bin/perl -w
+use strict;
+
+use AlvinMisc;
+use graph_viz;
+use graph_tbx;
+use tiers;
+
+my (%machine);
+$machine{"canaria.ens-lyon.fr"}{"CPU_clock"} = "347.669";
+$machine{"canaria.ens-lyon.fr"}{"CPU_Mflops"} = "34.333";
+$machine{"canaria.ens-lyon.fr"}{"CPU_model"} = "Pentium II (Deschutes)";
+$machine{"canaria.ens-lyon.fr"}{"CPU_num"} = "2";
+$machine{"canaria.ens-lyon.fr"}{"Machine_type"} = "i686";
+$machine{"canaria.ens-lyon.fr"}{"OS_version"} = "Linux 2.2.19pre17";
+
+$machine{"moby.ens-lyon.fr"}{"CPU_clock"} = "996.698";
+$machine{"moby.ens-lyon.fr"}{"CPU_Mflops"} = "114.444";
+$machine{"moby.ens-lyon.fr"}{"CPU_model"} = "Intel(R) Pentium(R) III Mobile CPU 1000MHz";
+$machine{"moby.ens-lyon.fr"}{"CPU_num"} = "1";
+$machine{"moby.ens-lyon.fr"}{"Machine_type"} = "i686";
+$machine{"moby.ens-lyon.fr"}{"OS_version"} = "Linux 2.4.18-accelerated";
+
+$machine{"popc0.ens-lyon.fr"}{"CPU_clock"} = "199.095";
+$machine{"popc0.ens-lyon.fr"}{"CPU_Mflops"} = "22.151";
+$machine{"popc0.ens-lyon.fr"}{"CPU_model"} = "Pentium Pro";
+$machine{"popc0.ens-lyon.fr"}{"CPU_num"} = "1";
+$machine{"popc0.ens-lyon.fr"}{"Machine_type"} = "i686";
+$machine{"popc0.ens-lyon.fr"}{"OS_version"} = "Linux 2.2.19";
+
+$machine{"sci0.ens-lyon.fr"}{"CPU_clock"} = "451.032446";
+$machine{"sci0.ens-lyon.fr"}{"CPU_Mflops"} = "48.492";
+$machine{"sci0.ens-lyon.fr"}{"CPU_model"} = "Pentium II (Deschutes)";
+$machine{"sci0.ens-lyon.fr"}{"CPU_num"} = "2";
+$machine{"sci0.ens-lyon.fr"}{"Machine_type"} = "i686";
+$machine{"sci0.ens-lyon.fr"}{"OS_version"} = "Linux 2.2.13";
+
+$machine{"lancelot.u-strasbg.fr"}{"OS_version"} = "Linux 2.2.17-21mdk";
+$machine{"lancelot.u-strasbg.fr"}{"CPU_clock"} = "400.916";
+$machine{"lancelot.u-strasbg.fr"}{"CPU_model"} = "Celeron (Mendocino)";
+$machine{"lancelot.u-strasbg.fr"}{"CPU_Mflops"} = "42.917000000000002";
+$machine{"lancelot.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"lancelot.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"caseb.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.8-26mdk";
+$machine{"caseb.u-strasbg.fr"}{"CPU_clock"} = "1399.763";
+$machine{"caseb.u-strasbg.fr"}{"CPU_model"} = "AMD Athlon(tm) 4 Processor";
+$machine{"caseb.u-strasbg.fr"}{"CPU_Mflops"} = "137.333";
+$machine{"caseb.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"caseb.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"pellinore.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.18-6mdksmp";
+$machine{"pellinore.u-strasbg.fr"}{"CPU_clock"} = "802.922";
+$machine{"pellinore.u-strasbg.fr"}{"CPU_model"} = "Pentium III (Coppermine)";
+$machine{"pellinore.u-strasbg.fr"}{"CPU_Mflops"} = "68.667000000000002";
+$machine{"pellinore.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"pellinore.u-strasbg.fr"}{"CPU_num"} = "2";
+
+$machine{"dinadan.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.19-686";
+$machine{"dinadan.u-strasbg.fr"}{"CPU_clock"} = "933.375";
+$machine{"dinadan.u-strasbg.fr"}{"CPU_model"} = "Pentium III (Coppermine)";
+$machine{"dinadan.u-strasbg.fr"}{"CPU_Mflops"} = "85.832999999999998";
+$machine{"dinadan.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"dinadan.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"darjeeling.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.18-5";
+$machine{"darjeeling.u-strasbg.fr"}{"CPU_clock"} = "1793.371";
+$machine{"darjeeling.u-strasbg.fr"}{"CPU_model"} = "Intel(R) Pentium(R) 4 CPU 1.80GHz";
+$machine{"darjeeling.u-strasbg.fr"}{"CPU_Mflops"} = "98.094999999999999";
+$machine{"darjeeling.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"darjeeling.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"gauvain.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.17";
+$machine{"gauvain.u-strasbg.fr"}{"CPU_clock"} = "1050.034";
+$machine{"gauvain.u-strasbg.fr"}{"CPU_model"} = "AMD Athlon(tm) Processor";
+$machine{"gauvain.u-strasbg.fr"}{"CPU_Mflops"} = "114.444";
+$machine{"gauvain.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"gauvain.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"sekhmet.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.18-k7";
+$machine{"sekhmet.u-strasbg.fr"}{"CPU_clock"} = "1399.803";
+$machine{"sekhmet.u-strasbg.fr"}{"CPU_model"} = "AMD Athlon(tm) 4 Processor";
+$machine{"sekhmet.u-strasbg.fr"}{"CPU_Mflops"} = "171.667";
+$machine{"sekhmet.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"sekhmet.u-strasbg.fr"}{"CPU_num"} = "1";
+
+$machine{"shaitan.u-strasbg.fr"}{"OS_version"} = "Linux 2.4.18-6mdk";
+$machine{"shaitan.u-strasbg.fr"}{"CPU_clock"} = "800.030";
+$machine{"shaitan.u-strasbg.fr"}{"CPU_model"} = "Pentium III (Coppermine)";
+$machine{"shaitan.u-strasbg.fr"}{"CPU_Mflops"} = "76.296000000000006";
+$machine{"shaitan.u-strasbg.fr"}{"Machine_type"} = "i686";
+$machine{"shaitan.u-strasbg.fr"}{"CPU_num"} = "1";
+
+my (%network);
+#0.587500,0.655,0.681
+
+$network{"bw"}{10} = [ [274285,0.514433], [330233,0.059904],
+                [949460,0.136931], [1063823,0.131098],
+                [2041829,7.413073] ];
+
+$network{"bw"}{100} = [ [64121,35.076518], [65264,0.270544],
+                [67418,0.156056], [80797,0.479780], [82517,6.932556],
+                [92951,0.189980], [94763,0.370788],
+                [123015,35.083019], [171318,295.890617],
+                [223570,0.278066], [274285,0.514433],
+                [330233,0.059904] ];
+
+$network{"bw"}{1000} = [ [937,53.930106], [2013,4.455826],
+                [2022,5.704550], [2025,5.652577], [2073,4.460898],
+                [2179,5.922616], [2195,4.669142], [2321,4.522355],
+                [2327,4.477270], [2427,4.062241], [2539,4.583831],
+                [3777,5.161451], [4448,3.101854], [4629,5.473705],
+                [4840,87.981858], [5773,0.006406], [6150,8.762440],
+                [7413,0.601375], [7837,0.424305], [7867,2.885584],
+                [7924,1.742977], [8394,9.647856], [9015,0.287840],
+                [9612,0.468130], [9842,1.502106], [10069,1.340162],
+                [10255,6.104672], [10609,1.402769], [11014,0.449267],
+                [11724,0.863872], [11741,0.869727], [11753,1.114548],
+                [12100,1.200141], [12122,0.844683], [12513,0.788956],
+                [13022,0.278175], [14341,7.877863], [14864,0.820952],
+                [15084,0.950938], [15111,1.081287], [15141,0.162735],
+                [15449,0.951830], [15797,0.380044], [15868,0.848211],
+                [17433,0.320114], [17819,0.907120], [17906,1.043314],
+                [18382,1.087968], [18788,0.259761], [18944,9.547561],
+                [20667,0.410463], [20864,0.637001], [22546,0.247605],
+                [24227,0.677908], [24547,0.040300], [25404,0.472524],
+                [26205,0.658142], [26382,0.595883], [26970,0.666676],
+                [27441,0.536941], [28416,3.870785], [29714,3.866813],
+                [31020,0.863123], [31452,1.913591], [31964,0.678645],
+                [33067,9.693542], [33378,0.728103], [34162,0.672289],
+                [34363,0.539000], [35178,0.677601], [35333,0.019773],
+                [35689,0.106949], [35881,0.126045], [37202,0.705967],
+                [37438,0.848712], [38536,0.117352], [38723,0.751810],
+                [39826,7.164412], [41518,0.630529], [41827,0.039417],
+                [42392,0.520693], [43729,0.272268], [44597,0.227430],
+                [45776,0.789218], [46068,4.760145], [46531,0.164758],
+                [52408,0.522878], [54216,0.533340], [57678,1.461517],
+                [60272,0.125428] ];
+
+sub assign_host_speed{
+    my($nodes,$edges) = @_;
+
+    my($u);
+
+    my(@label_list) = keys %machine;
+    foreach $u (keys %$nodes) {
+       my($mach_type_nb) = scalar(@label_list);
+       my($mach_type) = int rand($mach_type_nb);
+       $$nodes{$u}{Mflops} = $machine{$label_list[$mach_type]}{CPU_Mflops};
+    }
+}
+
+sub assign_host_names{
+    my($nodes,$edges) = @_;
+
+    my(@name_list) = qw(Abbott Adoncourt Aikin Alain Alfred Amadeus
+                        Angie Anjou Anne_Marie Apple April Archibald
+                        Aubertin Auclair Audy AutoCAD Barry BASIC
+                        Beaudoin Beaulac Bellemarre Bellevue
+                        Bell_Northern Benoit Bentz Bernard Bescherelle
+                        Blais Boily Boivin Borduas Boston Boucherville
+                        Bourassa Bousquet Boyer Brian Brosseau Brown
+                        Browne Cadieux Cambridge Canada Carole
+                        Casavant Chambly Charles Charron Christian
+                        Claude Cloutier Colin Comeau Corp Coulombe
+                        Cousineau Croteau Daniel Decelles Denis Denise
+                        Desjardins Dick Dionne Disney Dodge Domey
+                        Dominique Doris Dorval Doyon Drouin Dumoulin
+                        EDF Emacs Ethernet Europe Fafard Fernand
+                        Fernet Flamand Florient Foisy Forget Fourier
+                        FrameMaker France Francine Frank Fraser
+                        Freedman Gagnon Gaston Gatien Gaudreault
+                        Gauthier Gavrel Gendron Gentilly Geoff
+                        Geoffray George Georges Gilles Ginette Girard
+                        Goodwin Gordon Gosselin Gratton Greg Gregory
+                        Guy Harry Harwell Hayward Hollerbach Horne
+                        Houde Hubert Hz Inc Inmos Intel Interleaf
+                        Internet iRMX iRMXII iRMXIII Isabelle ISPELL
+                        Jackson Jacobsen Jacquelin Jacques
+                        Jacques_Cartier Jamie Jean Jean_Claude
+                        Jean_Louis Jean_Maurice Jeannine Jean_Paul
+                        Jean_Pierre Jean_Yves Jill Jobin Jocelyne John
+                        Jones Joynes Jude Julian Julien Juneau Jupiter
+                        Kansas Kent Khan King Kuenning kV Lachapelle
+                        Laflamme Lafontaine Lamothe Lapointe Laroche
+                        LaSalle LaTeX Laugier Laurendeau Laval Lavoie
+                        Leblanc Lecavalier Leclerc Lepage Lessard
+                        Letarte Linda LISP Longueuil Louis Louise
+                        Louis_Marc Ltd Lucie Mahoney Maltais Manseau
+                        Marc Marcel Marcoux Marie Marielle Mark
+                        Marseille Martin Masson Mathematica Matlab
+                        McGee McGill Messier METAFONT Michel Mike
+                        Minneapolis Mireille Mongenot Monique
+                        Mont_Tremblant Morin Morissette Moshe Mulhouse
+                        mW Nagle Nelligan Nestor Nicole OHara Olivier
+                        Ontario Ottawa Ouellet Owen Ozias Papineau
+                        Paul Pellan Pelletier PERL Phaneuf Phil Pierre
+                        Pierrefonds Plante Pointe_Claire PostScript
+                        Poussart Pronovost Provost Raymond Re README
+                        Renato Ricard Richard Ringuet Riopelle Rioux
+                        Roberge Robert Rochefort Roger Romano Ronald
+                        Roy Rubin Sacramento Saint_Amand Sainte_Foy
+                        Sainte_Julie Saint_Marc_sur_Richelieu Seattle
+                        Shawinigan Sherbrooke Sirois Smith Sorel Soucy
+                        SPARC SPARCs SPICE St_Antoine St_Bruno
+                        Ste_Anne Steele Ste_Julie Stephen St_Jacques
+                        St_Jean St_Paul Strasbourg Sun SunOS Suzanne
+                        Tanguay Tessier TeX Texas Thibault Thierry
+                        Todd Tokyo Toronto Toulouse Tremblay Turcotte
+                        Uintas UniPress Unix UNIX Utah Vancouver
+                        Varennes Verville Victoria Victoriaville Viger
+                        Vincent VxWorks Wilfrid William Williams
+                        Wright Yolande Yvan Yves Zawinski);
+
+    AlvinMisc::melange(\@name_list);
+
+    my($u);
+    foreach $u (keys %$nodes) {
+       if($$nodes{$u}{host}==1) {
+           $$nodes{$u}{name} = shift @name_list;
+       }
+    }
+}
+
+sub assign_link_speed{
+    my($nodes,$edges) = @_;
+
+    my($e);
+
+    foreach $e (keys %$edges) {
+       my($bw) = $$edges{$e}{bw};
+
+       my(@choice) = @{$network{"bw"}{$bw}};
+       my($choice_nb) = scalar(@choice);
+       my($chosen_link) = $choice[(int rand($choice_nb))];
+       $$edges{$e}{bw} = $$chosen_link[0]/8000;
+       $$edges{$e}{delay} = $$chosen_link[1];
+    }
+}
+
+
+sub affiche_graph{
+    my($nodes,$edges,$filename) = @_;
+    my($u,$v,$w,$e);
+    
+    my(%node_to_export);
+    my(%edge_to_export);
+
+    my(@host_list,@routeur_list,@link_list);
+
+    foreach $u (keys %{$nodes}) {
+       if (!((defined($$nodes{$u}{host}))&&($$nodes{$u}{host}==1))) { next; }
+       if (!((defined($$nodes{$u}{Mflops}))&&($$nodes{$u}{host}==1))) { 
+           die "Lacking Mflops for $u\n"; 
+       }
+       push @host_list,$u;
+       $node_to_export{$u}=$#host_list;
+    }
+
+    foreach $u (@host_list){
+        foreach $v (@host_list){
+           if($u ne $v) {
+               $w = $u;
+               if(!defined($node_to_export{$w})) {
+                   push @routeur_list,$w;
+                   $node_to_export{$w}=$#host_list + $#routeur_list + 1;
+               }
+               while ($w ne $v) {
+                   my($next) = $$nodes{$w}{shortest_route}{$v};
+                   my($e) = $$nodes{$w}{out}{$next};
+                   if(!defined($edge_to_export{$e})) {
+                       push @link_list,$e;
+                       $edge_to_export{$e}=$#link_list;
+                   }
+                   $w = $next;
+                   if(!defined($node_to_export{$w})) {
+                       push @routeur_list,$w;
+                       $node_to_export{$w}=$#host_list + $#routeur_list + 1;
+                   }
+               }
+           }
+       }
+    }
+
+    open VIZ, "> $filename.dot";
+    print VIZ "graph essai  { \n";
+    print VIZ "  graph [overlap=scale]\n";
+    #print VIZ "  graph [overlap=false spline=true]\n";
+    print VIZ "  node [shape=box, style=filled]\n";
+    print VIZ "  node [width=.3, height=.3, style=filled]\n";
+
+    foreach $u (@host_list) {
+       print VIZ "  \"$u\" [label=\"$$nodes{$u}{name}\",color=red,shape=box];\n";
+    }
+    foreach $u (@routeur_list) {
+           print VIZ "  \"$u\" [label=\"$$nodes{$u}{name}\",fontsize=2,color=skyblue,shape=circle];\n";
+    }
+    foreach $e (@link_list) {
+       my($src)=$$edges{$e}{src};
+       my($dst)=$$edges{$e}{dst};
+       (defined($$edges{$e}{bw})) or die "Lacking bw for $u\n"; 
+       (defined($$edges{$e}{delay})) or die "Lacking bw for $u\n"; 
+       print VIZ "  \"$src\" -- \"$dst\";\n";
+    }
+
+    print VIZ "}\n";
+    close VIZ;
+
+    system("neato -Tps $filename.dot  > $filename.ps");
+#    system("gv $filename.ps");
+    system("pstoedit -f fig $filename.ps $filename.fig 2>/dev/null");
+#    system("xfig -startg 0 $filename.fig ");
+}
+
+sub build_lat_matrix {
+    my($nodes,$edges) = @_;
+    my($u,$v,$w,$e);
+    my(@host_list)=();
+    my($matrix);
+    foreach $u (keys %{$nodes}) {
+       if (!((defined($$nodes{$u}{host}))&&($$nodes{$u}{host}==1))) { next; }
+       push @host_list,$u;
+    }
+
+    foreach $u (@host_list){
+        foreach $v (@host_list){
+           $$matrix{$$nodes{$u}{name}}{$$nodes{$v}{name}}=0;
+           if($u ne $v) {
+               $w = $u;
+               while ($w ne $v) {
+                   my($next) = $$nodes{$w}{shortest_route}{$v};
+                   $e = $$nodes{$w}{out}{$next};
+                   $$matrix{$$nodes{$u}{name}}{$$nodes{$v}{name}}+=$$edges{$e}{delay};
+                   $w = $next;
+               }
+           }
+           print STDERR "$$nodes{$u}{name} -> $$nodes{$v}{name} : $$matrix{$$nodes{$u}{name}}{$$nodes{$v}{name}}\n";
+       }
+    }
+    return $matrix;
+}
+
+sub cluster_matrix {
+    my($matrix)=@_;
+    my($nodes,$edges) = G_new_graph();
+
+    my(@host_list)=keys %$matrix;
+
+    my($root);
+    my($u,$v);
+    my($min,$min_u,$min_v);
+    my(%taken);
+    foreach $u (@host_list){
+       G_new_node($nodes,$edges,$u);
+    }
+    
+    $root=$host_list[0];
+    $taken{$root} = 1;
+
+    while(scalar(keys %taken) != scalar(@host_list)) {
+       $min = 10000000000000;
+       foreach $u (keys %taken) {
+           foreach $v (@host_list) {
+               if(!$taken{$v}) {
+                   if($u ne $v) {
+                       if($$matrix{$u}{$v}<$min) {
+                           $min=$$matrix{$u}{$v};
+                           $min_u=$u;
+                           $min_v=$v;
+                       }
+                   }
+               }
+           }
+       }
+       $taken{$min_u} = $taken{$min_v} = 1;
+       G_connect($nodes,$edges,$min_u,$min_v);
+       print STDERR "Connecting $min_u and $min_v\n"
+    }
+    return ($nodes,$edges,$root);
+}
+
+sub PP {
+    my($nodes, $edges, $taken, $root) = @_;
+    my($u);
+    my(@tab) = ();
+    push @tab, $root;
+    foreach $u (keys (%{$$nodes{$root}{out}})) {
+       if($$taken{$u}) { next;}
+       $$taken{$u}=1;
+       push(@tab,PP($nodes,$edges, $taken, $u));
+    }
+    return \@tab;
+}
+
+sub create_orientation {
+    my($nodes,$edges,$root) = @_;
+    my(%taken);
+
+    $taken{$root} = 1;
+    
+    return PP($nodes,$edges, \%taken,$root);
+}
+
+sub dump_orientation {
+   my($nodes,$edges, $tab) = @_;
+   my($u,$father);
+   my($root) = shift @$tab;
+
+   print DEPLOYMENT '  <process host="'.$$nodes{$root}{name}.'" function="msma_agent">'."\n";
+   print DEPLOYMENT '     <argument value="blabla"/>     <!-- policy -->'."\n";
+
+   {  # Need to find my father...
+       my(@sons) = ();
+       my(@neighboors) = keys %{$$nodes{$root}{in}};
+
+       $father = -1;
+
+       foreach $u (@$tab) {
+          push @sons,$$u[0];
+       }
+       @sons = sort @sons;
+       @neighboors = sort @neighboors;
+
+       if($#sons != $#neighboors) {
+          $u = 0;
+          while(defined($sons[$u])&&($sons[$u] eq $neighboors[$u])) {
+              $u++;
+          }
+          $father = $neighboors[$u];
+       }
+   }
+
+   if($father ne -1) {
+       print DEPLOYMENT "     <argument value=\"$$nodes{$root}{name}\"/>  <!-- father -->\n";
+   } else {
+       print DEPLOYMENT '     <argument value=""/>  <!-- father -->'."  <!-- I am the master -->\n";
+   }
+
+
+   foreach $u (@$tab) {
+       print DEPLOYMENT "     <argument value=\"$$nodes{$$u[0]}{name}\"/>\n";
+   }
+   print DEPLOYMENT "  </process>\n";
+   foreach $u (@$tab) {
+       dump_orientation($nodes, $edges, $u);
+   }
+
+   unshift @$tab, $root;
+}
+
+sub main {
+    my($nodes,$edges,$interferences,$host_list,$count_interferences);
+
+    $#ARGV>=0 or die "Need a tiers file!";
+    my($filename)=$ARGV[0];
+    $filename =~ s/\.[^\.]*$//g;
+    if(1) {
+        print STDERR "Reading graph\n";
+        ($nodes,$edges) = parse_tiers_file $ARGV[0];
+
+        print STDERR "Generating host list\n";
+        $host_list = generate_host_list($nodes,$edges,.7);
+        assign_host_speed($nodes,$edges);
+        assign_link_speed($nodes,$edges);
+        assign_host_names($nodes,$edges);
+        print STDERR "Computing Shortest Paths \n";
+        shortest_paths($nodes,$edges);
+        print STDERR "Exporting to surfxml\n";
+       G_surfxml_export($nodes,$edges,"$filename.xml");
+        print STDERR "Calling graphviz\n";
+       affiche_graph($nodes,$edges,"$filename");
+       print STDERR "Getting Latency Matrix\n";
+       my($matrix)=build_lat_matrix($nodes,$edges);
+       print STDERR "Clustering on Latency\n";
+       my($n_nodes,$n_edges,$root)=cluster_matrix($matrix);
+       print STDERR "Creating Orientation\n";
+       my($orientation) = create_orientation($n_nodes,$n_edges,$root);
+       print STDERR "Exporting deployment\n";
+       open DEPLOYMENT, "> $ARGV[0]_deployment.xml";
+       dump_orientation($n_nodes,$n_edges, $orientation);
+       close DEPLOYMENT;
+    }
+}
+
+main;