Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove memory management error.
[simgrid.git] / examples / msg / gtnets / gtnets.c
index dc4f838..09d43c3 100644 (file)
@@ -1,10 +1,6 @@
-
-
-
 #include <stdio.h>
 #include <stdlib.h>
 #include "msg/msg.h"
-/* Create a log channel to have nice outputs. */
 #include "xbt/log.h"
 #include "xbt/asserts.h"
 
@@ -19,6 +15,16 @@ typedef enum {
   MAX_CHANNEL
 } channel_t;
 
+//keep a pointer to all surf running tasks.
+#define NTASKS 1500
+int bool_printed=0;
+double start_time, end_time, elapsed_time;
+double   gl_data_size[NTASKS];
+m_task_t gl_task_array[NTASKS];
+const char * slavenames[NTASKS];
+const char * masternames[NTASKS];
+int gl_task_array_id=0;
+
 #define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */
 
 /** master */
@@ -28,6 +34,13 @@ int master(int argc, char *argv[])
   double task_comm_size = 0;
   m_task_t todo;
   m_host_t slave;
+  char id_alias[10];
+  //unique id to control statistics
+  int id = -1;
+
+  if(argc != 4){
+    INFO1("Strange number of arguments expected 3 got %d", argc-1 );
+  }
 
   /* data size */
   xbt_assert1(sscanf(argv[1],"%lg", &task_comm_size),
@@ -35,10 +48,18 @@ int master(int argc, char *argv[])
 
   /* slave name */
   slavename = argv[2];
+  id = atoi(argv[3]);
+  sprintf(id_alias, "%d",id);
+  slavenames[id] = slavename;
+
+  masternames[id] = MSG_host_get_name(MSG_host_self());
   
   { /*  Task creation.  */
     char sprintf_buffer[64] = "Task_0";
     todo = MSG_task_create(sprintf_buffer, 0, task_comm_size, NULL);
+    //keep track of running tasks
+    gl_task_array[id] = todo;
+    gl_data_size[id]=task_comm_size;
   }
 
   { /* Process organisation */
@@ -46,14 +67,15 @@ int master(int argc, char *argv[])
   }
 
   /* time measurement */
-  double start_time = MSG_get_clock();
-  MSG_task_put(todo, slave, PORT_22);
-  double end_time = MSG_get_clock();
-  INFO2("Send completed (to %s). Transfer time: %f\n",
-       slave->name, (end_time - start_time));
-  printf("Completed peer: %s time: %f\n", slave->name, (end_time-start_time));
-  MSG_task_put(MSG_task_create("finalize", 0, 0, FINALIZE),
-      slave, PORT_22);
+  start_time = MSG_get_clock();
+  //MSG_task_put(todo, slave, PORT_22);
+  INFO1("Sending to %s", id_alias);
+  MSG_task_send(todo, id_alias);  
+
+  end_time = MSG_get_clock();
+  INFO3("Send completed (to %s). Transfer time: %f\t Agregate bandwidth: %f",
+       slave->name, (end_time - start_time), task_comm_size/(end_time-start_time));
+  INFO2("Completed peer: %s time: %f", slave->name, (end_time-start_time));
 
   return 0;
 } /* end_of_master */
@@ -61,21 +83,55 @@ int master(int argc, char *argv[])
 /** Receiver function  */
 int slave(int argc, char *argv[])
 {
-  while(1) {
-    m_task_t task = NULL;
-    int a;
-    a = MSG_task_get(&(task), PORT_22);
-    if (a == MSG_OK) {
-      if(MSG_task_get_data(task)==FINALIZE) {
-       MSG_task_destroy(task);
-       break;
+
+  m_task_t task = NULL;
+  int a;
+  int id=0;
+  double remaining=0;
+  char id_alias[10];
+
+  if(argc != 2){
+    INFO1("Strange number of arguments expected 1 got %d", argc-1 );
+  }
+
+  id = atoi(argv[1]);
+  sprintf(id_alias, "%d",id);
+
+
+  //a = MSG_task_get(&(task), PORT_22);
+  INFO1("Receiving on %s", id_alias);
+  a = MSG_task_receive(&(task), id_alias );
+  
+
+  if (a != MSG_OK) {
+    INFO0("Hey?! What's up?");
+    xbt_assert0(0,"Unexpected behavior.");
+  }
+  
+  elapsed_time = MSG_get_clock() - start_time;
+
+  if(!bool_printed){
+    bool_printed=1;
+    for(id=0; id<NTASKS; id++){
+      if(gl_task_array[id] == NULL){
+      }else if(gl_task_array[id] == task){
+       INFO5("===> Estimated Bw of FLOW[%d] : %f ;  message from %s to %s  with remaining : %f", id,  gl_data_size[id]/elapsed_time, masternames[id], slavenames[id],  0.0);
+      }else{
+       remaining = MSG_task_get_remaining_communication(gl_task_array[id]);
+       INFO5("===> Estimated Bw of FLOW[%d] : %f ;  message from %s to %s  with remaining : %f", id,  (gl_data_size[id]-remaining)/elapsed_time, masternames[id], slavenames[id],  remaining);
       }
+    }
+    exit(0);
+  }
+
+  for(id=0; id<NTASKS; id++){
+    if(gl_task_array[id] == task){
       MSG_task_destroy(task);
-    } else {
-      INFO0("Hey?! What's up?");
-      xbt_assert0(0,"Unexpected behavior.");
+      gl_task_array[id] = NULL;
+      return 0;
     }
   }
+
   return 0;
 } /* end_of_slave */
 
@@ -85,11 +141,11 @@ MSG_error_t test_all(const char *platform_file,
 {
   MSG_error_t res = MSG_OK;
 
-/*   MSG_config("workstation_model", "GTNETS"); */
+  /* MSG_config("workstation_model", "GTNETS"); */
   /* MSG_config("workstation_model","KCCFLN05"); */
   {                            /*  Simulation setting */
     MSG_set_channel_number(MAX_CHANNEL);
-    MSG_paje_output("msg_test.trace");
+    //MSG_paje_output("msg_test.trace");
     MSG_create_environment(platform_file);
   }
   {                   /*   Application deployment */
@@ -101,11 +157,11 @@ MSG_error_t test_all(const char *platform_file,
   return res;
 } /* end_of_test_all */
 
-
 /** Main function */
 int main(int argc, char *argv[])
 {
   MSG_error_t res = MSG_OK;
+  bool_printed = 0;
 
   MSG_global_init(&argc,argv);
   if (argc < 3) {
@@ -119,18 +175,3 @@ int main(int argc, char *argv[])
   if(res==MSG_OK) return 0; 
   else return 1;
 } /* end_of_main */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-