Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add some peer traces.
[simgrid.git] / examples / gras / all2all / make_deployment.pl
index cf0e4c0..3220e86 100755 (executable)
@@ -4,26 +4,33 @@ use strict;
 
 sub usage {
     print STDERR <<EOH
-Usage: all2all_make_deployment.pl platform_file.xml nb_host
+Usage: all2all_make_deployment.pl platform_file.xml nb_host size_msg (bcast source?)
   
 This script generates a deployment file for the all2all program. It takes 
 a SimGrid platform file as first argument and the number of wanted peers as 
 second argument. If the amount of peers exceeds the amount of available 
-hosts in the deployment file, several peers will be placed on the same host. 
+hosts in the deployment file, several peers will be placed on the same host.
+
+The third argument is a size of the message to send ( octets )  
+
+If a fourth argument is passed, this is the source of the broadcast
+(given as a number between 0 and nb_host-1).
 EOH
       ;
     die "\n";
 }
 
 my $input    = shift @ARGV || usage();
-my $nb_hosts = shift @ARGV || usage();
+my $size_msg = shift @ARGV || usage();
+my $source   = shift @ARGV || "";
+my $nb_hosts = shift @ARGV || 0;
 
 my @host;
 
 open IN,$input || die "Cannot open $input: $!\n";
 
 while (<IN>) {
-  next unless /<cpu name="([^"]*)"/; # "
+  next unless /<host id="([^"]*)"/; # "
   
   push @host, $1;
 }
@@ -33,16 +40,21 @@ while (<IN>) {
 die "No host found in $input. Is it really a SimGrid platform file?\nCheck that you didn't pass a deployment file, for example.\n"
   unless (scalar @host);
 
+if (! $nb_hosts) {
+    $nb_hosts = scalar @host;
+}
+
+
 # 
 # Build the receiver string
 
-my $receivers;    # strings containing sender argument describing all receivers.
+my @receivers;    # strings containing sender argument describing all receivers.
 
 my $it_host=0;    # iterator
 my $it_port=4000; # iterator, in case we have so much processes to add that we must change it
 
 for (my $i=0; $i<$nb_hosts; $i++) {
-  $receivers .= "    <argument value=\"$host[$it_host]:$it_port\"/>\n";
+  push (@receivers, "$host[$it_host]:$it_port");
   $it_host ++;
   if ($it_host == scalar @host) {
     $it_host=0;
@@ -51,30 +63,45 @@ for (my $i=0; $i<$nb_hosts; $i++) {
 }
 
 #
-# and now, really generate the file
+# and now, really generate the file. Receiver first.
 
 print "<?xml version='1.0'?>\n";
-print "<!DOCTYPE platform_description SYSTEM \"surfxml.dtd\">\n";
-print "<platform_description>\n\n";
-
-# reset iterators
-$it_port=4000;
-$it_host=0;
+print "<!DOCTYPE platform SYSTEM \"simgrid.dtd\">\n";
+print "<platform version=\"2\">\n\n";
+
+for my $r (@receivers) {
+    my ($h, $p) = split(':', $r);
+    print "  <process host=\"".$h."\" function=\"receiver\">\n";
+    print "    <argument value=\"$p\"/><argument value=\"".(length($source)?1:$nb_hosts)."\"/>\n";
+    print "  </process>\n\n";
+}
 
-for (my $i=0; $i<$nb_hosts; $i++) {
-  print "  <process host=\"".$host[$it_host]."\" function=\"sender\">\n";
-  print $receivers;
-  print "  </process>\n";
-    
-  print "  <process host=\"".$host[$it_host]."\" function=\"receiver\">\n";
-  print "    <argument value=\"$it_port\"/><argument value=\"$nb_hosts\"/>\n";
-  print "  </process>\n\n";
-    
-  $it_host ++;
-  if ($it_host == scalar @host) {
-    $it_host=0;
-    $it_port++;
-  }
+#
+# Here come the sender(s)
+
+if(length($source)) {
+    print "  <process host=\"".$host[$source % (scalar @host)].
+       "\" function=\"sender\">\n";
+    for my $r (@receivers) {
+       print "    <argument value=\"$r\"/>\n"; 
+    }
+    print "    <argument value=\"$size_msg\"/>\n"; 
+    print "  </process>\n";
+} else {
+    my $i = 0; 
+    for my $r (@receivers) {
+       my ($h, $p) = split(":", $r); 
+        print "  <process host=\"".$h."\" function=\"sender\">\n";
+        for (my $j = 0; $j < $nb_hosts; $j++) {
+           my $r2 = $receivers[($i + $j) % ($nb_hosts)]; 
+           print "    <argument value=\"$r2\"/>\n"; 
+        }
+        print "    <argument value=\"$size_msg\"/>\n"; 
+        print "  </process>\n";
+        $i++;
+    }
 }
 
-print "</platform_description>\n";
+print "</platform>\n";
+
+# print "source='$source' nb_hosts=$nb_hosts\n";