Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added a reliable print mechanism, now flow labels depend on id. Hence, the order...
[simgrid.git] / examples / msg / gtnets / gtnets.c
index dc4f838..04e92ee 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,14 @@ typedef enum {
   MAX_CHANNEL
 } channel_t;
 
+//keep a pointer to all surf running tasks.
+#define NTASKS 2
+int bool_printed=0;
+double start_time, end_time, elapsed_time;
+double   gl_data_size[NTASKS];
+m_task_t gl_task_array[NTASKS];
+int gl_task_array_id=0;
+
 #define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */
 
 /** master */
@@ -28,6 +32,8 @@ int master(int argc, char *argv[])
   double task_comm_size = 0;
   m_task_t todo;
   m_host_t slave;
+  //unique id to control statistics
+  int id=gl_task_array_id++;
 
   /* data size */
   xbt_assert1(sscanf(argv[1],"%lg", &task_comm_size),
@@ -39,6 +45,9 @@ int master(int argc, char *argv[])
   { /*  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 +55,12 @@ int master(int argc, char *argv[])
   }
 
   /* time measurement */
-  double start_time = MSG_get_clock();
+  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);
+  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 +68,35 @@ 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;
+  char flow='A';
+  m_task_t task = NULL;
+  int a;
+  int id=0;
+  double remaining=0;
+  a = MSG_task_get(&(task), PORT_22);
+  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){
+       INFO0("===> Task already done, skipping print statistics");
+      }else if(gl_task_array[id] == task){
+       INFO2("===> Estimated Bw of FLOW%c : %f", flow+id, gl_data_size[id]/elapsed_time);
+      }else{
+       remaining = MSG_task_get_remaining_communication(gl_task_array[id]);
+       INFO3("===> Estimated Bw of FLOW%c : %f , with remaining %f", flow+id, (gl_data_size[id]-remaining)/elapsed_time, remaining);
       }
-      MSG_task_destroy(task);
-    } else {
-      INFO0("Hey?! What's up?");
-      xbt_assert0(0,"Unexpected behavior.");
     }
   }
+
+  MSG_task_destroy(task);
+
   return 0;
 } /* end_of_slave */
 
@@ -85,7 +106,7 @@ 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);
@@ -101,11 +122,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 +140,3 @@ int main(int argc, char *argv[])
   if(res==MSG_OK) return 0; 
   else return 1;
 } /* end_of_main */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-