Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
can be interesting to get the value of the alpha parameter for parallel
[simgrid.git] / src / simdag / sd_task.c
index 3673944..ba64864 100644 (file)
@@ -451,6 +451,20 @@ double SD_task_get_amount(SD_task_t task)
   return task->amount;
 }
 
+/**
+ * \brief Returns the alpha parameter of a SD_TASK_COMP_PAR_AMDAH task
+ *
+ * \param task a parallel task assuming Amdahl's law as speedup model
+ * \return the alpha parameter (serial part of a task in percent) for this task
+ */
+double SD_task_get_alpha(SD_task_t task)
+{
+  xbt_assert(SD_task_get_kind(task) == SD_TASK_COMP_PAR_AMDAHL,
+     "Alpha parameter is not defined for this kink of task");
+  return task->alpha;
+}
+
+
 /**
  * \brief Returns the remaining amount work to do till the completion of a task
  *
@@ -504,11 +518,16 @@ void SD_task_dump(SD_task_t task)
     case SD_TASK_COMP_PAR_AMDAHL:
       XBT_INFO("  - kind: parallel computation following Amdahl's law");
       break;
+    case SD_TASK_COMM_PAR_MXN_1D_BLOCK:
+      XBT_INFO("  - kind: MxN data redistribution assuming 1D block distribution");
+      break;
     default:
       XBT_INFO("  - (unknown kind %d)", task->kind);
     }
   }
   XBT_INFO("  - amount: %.0f", SD_task_get_amount(task));
+  if (task->kind == SD_TASK_COMP_PAR_AMDAHL)
+    XBT_INFO("  - alpha: %.2f", task->alpha);
   XBT_INFO("  - Dependencies to satisfy: %d", task->unsatisfied_dependencies);
   if (!xbt_dynar_is_empty(task->tasks_before)) {
     XBT_INFO("  - pre-dependencies:");
@@ -532,9 +551,11 @@ void SD_task_dotty(SD_task_t task, void *out)
   fprintf(out, "  T%p [label=\"%.20s\"", task, task->name);
   switch (task->kind) {
   case SD_TASK_COMM_E2E:
+  case SD_TASK_COMM_PAR_MXN_1D_BLOCK:
     fprintf(out, ", shape=box");
     break;
   case SD_TASK_COMP_SEQ:
+  case SD_TASK_COMP_PAR_AMDAHL:
     fprintf(out, ", shape=circle");
     break;
   default:
@@ -1477,13 +1498,17 @@ void SD_task_schedulev(SD_task_t task, int count,
       SD_task_t before = dep->src;
       if (before->kind == SD_TASK_COMM_PAR_MXN_1D_BLOCK){
         if (!before->workstation_list){
-          XBT_VERB("Sender side of Task %s is not scheduled yet. Fill the workstation list with receiver side",
+          XBT_VERB("Sender side of Task %s is not scheduled yet",
              SD_task_get_name(before));
           before->workstation_list = xbt_new0(SD_workstation_t, count);
           before->workstation_nb = count;
+          XBT_VERB("Fill the workstation list with list of Task '%s'",
+            SD_task_get_name(task));
           for (i=0;i<count;i++)
             before->workstation_list[i] = task->workstation_list[i];
         } else {
+          XBT_VERB("Build communication matrix for task '%s'",
+             SD_task_get_name(before));
           int src_nb, dst_nb;
           double src_start, src_end, dst_start, dst_end;
           src_nb = before->workstation_nb;
@@ -1538,10 +1563,12 @@ void SD_task_schedulev(SD_task_t task, int count,
       SD_task_t after = dep->dst;
       if (after->kind == SD_TASK_COMM_PAR_MXN_1D_BLOCK){
         if (!after->workstation_list){
-          XBT_VERB("Receiver side of Task %s is not scheduled yet. Fill the workstation list with sender side",
+          XBT_VERB("Receiver side of Task '%s' is not scheduled yet",
               SD_task_get_name(after));
           after->workstation_list = xbt_new0(SD_workstation_t, count);
           after->workstation_nb = count;
+          XBT_VERB("Fill the workstation list with list of Task '%s'",
+            SD_task_get_name(task));
           for (i=0;i<count;i++)
             after->workstation_list[i] = task->workstation_list[i];
         } else {