- xbt_dynar_foreach(task->tasks_before, cpt, dep) {
- SD_task_t before = dep->src;
- if (before->kind == SD_TASK_COMM_PAR_MXN_1D_BLOCK){
- if (!before->host_list){
- XBT_VERB("Sender side of Task %s is not scheduled yet", SD_task_get_name(before));
- before->host_list = xbt_new0(sg_host_t, count);
- before->host_count = count;
- XBT_VERB("Fill the workstation list with list of Task '%s'", SD_task_get_name(task));
- for (i=0;i<count;i++)
- before->host_list[i] = task->host_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->host_count;
- dst_nb = count;
- before->host_list = static_cast<sg_host_t*>(xbt_realloc(before->host_list, (before->host_count+count)*sizeof(sg_host_t)));
- for(i=0; i<count; i++)
- before->host_list[before->host_count+i] = task->host_list[i];
-
- before->host_count += count;
- xbt_free(before->flops_amount);
- xbt_free(before->bytes_amount);
- before->flops_amount = xbt_new0(double, before->host_count);
- before->bytes_amount = xbt_new0(double, before->host_count* before->host_count);
-
- for(i=0;i<src_nb;i++){
- src_start = i*before->amount/src_nb;
- src_end = src_start + before->amount/src_nb;
- for(j=0; j<dst_nb; j++){
- dst_start = j*before->amount/dst_nb;
- dst_end = dst_start + before->amount/dst_nb;
- XBT_VERB("(%s->%s): (%.2f, %.2f)-> (%.2f, %.2f)", sg_host_get_name(before->host_list[i]),
- sg_host_get_name(before->host_list[src_nb+j]), src_start, src_end, dst_start, dst_end);
- if ((src_end <= dst_start) || (dst_end <= src_start)) {
- before->bytes_amount[i*(src_nb+dst_nb)+src_nb+j]=0.0;
- } else {
- before->bytes_amount[i*(src_nb+dst_nb)+src_nb+j] = MIN(src_end, dst_end) - MAX(src_start, dst_start);
- }
- XBT_VERB("==> %.2f", before->bytes_amount[i*(src_nb+dst_nb)+src_nb+j]);
+ for (auto input : *task->inputs){
+ if (!input->host_list){
+ XBT_VERB("Sender side of Task %s is not scheduled yet", SD_task_get_name(input));
+ input->host_list = xbt_new0(sg_host_t, count);
+ input->host_count = count;
+ XBT_VERB("Fill the workstation list with list of Task '%s'", SD_task_get_name(task));
+ for (int i=0; i<count; i++)
+ input->host_list[i] = task->host_list[i];
+ } else {
+ XBT_VERB("Build communication matrix for task '%s'", SD_task_get_name(input));
+ int src_nb, dst_nb;
+ double src_start, src_end, dst_start, dst_end;
+ src_nb = input->host_count;
+ dst_nb = count;
+ input->host_list = static_cast<sg_host_t*>(xbt_realloc(input->host_list, (input->host_count+count)*sizeof(sg_host_t)));
+ for (int i=0; i<count; i++)
+ input->host_list[input->host_count+i] = task->host_list[i];
+
+ input->host_count += count;
+ xbt_free(input->flops_amount);
+ xbt_free(input->bytes_amount);
+ input->flops_amount = xbt_new0(double, input->host_count);
+ input->bytes_amount = xbt_new0(double, input->host_count* input->host_count);
+
+ for (int i=0; i<src_nb; i++) {
+ src_start = i*input->amount/src_nb;
+ src_end = src_start + input->amount/src_nb;
+ for (int j=0; j<dst_nb; j++) {
+ dst_start = j*input->amount/dst_nb;
+ dst_end = dst_start + input->amount/dst_nb;
+ XBT_VERB("(%s->%s): (%.2f, %.2f)-> (%.2f, %.2f)", sg_host_get_name(input->host_list[i]),
+ sg_host_get_name(input->host_list[src_nb+j]), src_start, src_end, dst_start, dst_end);
+ if ((src_end <= dst_start) || (dst_end <= src_start)) {
+ input->bytes_amount[i*(src_nb+dst_nb)+src_nb+j]=0.0;
+ } else {
+ input->bytes_amount[i*(src_nb+dst_nb)+src_nb+j] = MIN(src_end, dst_end) - MAX(src_start, dst_start);