int main(int argc, char **argv)
{
xbt_dynar_t dot;
- unsigned int cursor;
- SD_task_t task;
/* initialization of SD */
SD_init(&argc, argv);
exit(2);
}
- char *tracefilename;
- const char* last = strrchr(argv[2], '.');
- tracefilename = bprintf("%.*s.trace", (int) (last == NULL ? strlen(argv[2]) : last - argv[2]),argv[2]);
- if (argc == 4)
- tracefilename = xbt_strdup(argv[3]);
-
- /* Display all the tasks */
- XBT_INFO("------------------- Display all tasks of the loaded DAG ---------------------------");
- xbt_dynar_foreach(dot, cursor, task) {
- SD_task_dump(task);
- }
-
- FILE *dotout = fopen("dot.dot", "w");
- fprintf(dotout, "digraph A {\n");
- xbt_dynar_foreach(dot, cursor, task) {
- SD_task_dotty(task, dotout);
- }
- fprintf(dotout, "}\n");
- fclose(dotout);
-
- /* Schedule them all on the first workstation */
- XBT_INFO("------------------- Schedule tasks ---------------------------");
- sg_host_t *hosts = sg_host_list();
-
- int count = sg_host_count();
- xbt_dynar_foreach(dot, cursor, task) {
- if (SD_task_get_kind(task) == SD_TASK_COMP_SEQ) {
- if (!strcmp(SD_task_get_name(task), "end"))
- SD_task_schedulel(task, 1, hosts[0]);
- else
- SD_task_schedulel(task, 1, hosts[cursor % count]);
- }
- }
- xbt_free(hosts);
-
- XBT_INFO("------------------- Run the schedule ---------------------------");
- SD_simulate(-1);
-
- XBT_INFO("------------------- Produce the trace file---------------------------");
- XBT_INFO("Producing the trace of the run into %s", basename(tracefilename));
- FILE *out = fopen(tracefilename, "w");
- xbt_assert(out, "Cannot write to %s", tracefilename);
- free(tracefilename);
-
- xbt_dynar_foreach(dot, cursor, task) {
- int kind = SD_task_get_kind(task);
- sg_host_t *wsl = SD_task_get_workstation_list(task);
- switch (kind) {
- case SD_TASK_COMP_SEQ:
- fprintf(out, "[%f->%f] %s compute %f flops # %s\n",
- SD_task_get_start_time(task), SD_task_get_finish_time(task),
- sg_host_get_name(wsl[0]), SD_task_get_amount(task), SD_task_get_name(task));
- break;
- case SD_TASK_COMM_E2E:
- fprintf(out, "[%f -> %f] %s -> %s transfer of %.0f bytes # %s\n",
- SD_task_get_start_time(task), SD_task_get_finish_time(task),
- sg_host_get_name(wsl[0]), sg_host_get_name(wsl[1]), SD_task_get_amount(task), SD_task_get_name(task));
- break;
- default:
- xbt_die("Task %s is of unknown kind %u", SD_task_get_name(task), SD_task_get_kind(task));
- }
- SD_task_destroy(task);
- }
- xbt_dynar_free_container(&dot);
- fclose(out);
-
- /* exit */
return 0;
}
#!/usr/bin/env tesh
p Test the loader of DAG written in the DOT format
-# The order differ when executed with gcc's thread sanitizer
-! output sort
-
-$ ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../../platforms/cluster_backbone.xml ${srcdir:=.}/dag-dotload/dag.dot
-> [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
-> [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG ---------------------------
-> [0.000000] [sd_task/INFO] Displaying task root
-> [0.000000] [sd_task/INFO] - state: schedulable not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 0
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 0
-> [0.000000] [sd_task/INFO] root->5
-> [0.000000] [sd_task/INFO] Displaying task 0
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000129
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] root
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 0->1
-> [0.000000] [sd_task/INFO] Displaying task 1
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000131
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 0->1
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 1->2
-> [0.000000] [sd_task/INFO] Displaying task 2
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000121
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 1->2
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 2->3
-> [0.000000] [sd_task/INFO] Displaying task 3
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000231
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 2->3
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 4
-> [0.000000] [sd_task/INFO] Displaying task 4
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000005
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 3
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 4->5
-> [0.000000] [sd_task/INFO] Displaying task 5
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000046
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 4->5
-> [0.000000] [sd_task/INFO] root->5
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 6
-> [0.000000] [sd_task/INFO] Displaying task 6
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000092
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 5
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 6->7
-> [0.000000] [sd_task/INFO] Displaying task 7
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000041
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 6->7
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 7->8
-> [0.000000] [sd_task/INFO] 7->end
-> [0.000000] [sd_task/INFO] Displaying task 8
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000250
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 7->8
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 9
-> [0.000000] [sd_task/INFO] Displaying task 9
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000079
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 8
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] end
-> [0.000000] [sd_task/INFO] Displaying task 0->1
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10001
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 0
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 1
-> [0.000000] [sd_task/INFO] Displaying task 1->2
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10004
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 1
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 2
-> [0.000000] [sd_task/INFO] Displaying task 2->3
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10002
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 2
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 3
-> [0.000000] [sd_task/INFO] Displaying task 4->5
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10029
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 4
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 5
-> [0.000000] [sd_task/INFO] Displaying task 6->7
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10005
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 6
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 7
-> [0.000000] [sd_task/INFO] Displaying task 7->8
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10000
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 7
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 8
-> [0.000000] [sd_task/INFO] Displaying task 7->end
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10014000
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 7
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] end
-> [0.000000] [sd_task/INFO] Displaying task root->5
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - amount: 10014000
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] root
-> [0.000000] [sd_task/INFO] - post-dependencies:
-> [0.000000] [sd_task/INFO] 5
-> [0.000000] [sd_task/INFO] Displaying task end
-> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
-> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - amount: 10000000129
-> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
-> [0.000000] [sd_task/INFO] - pre-dependencies:
-> [0.000000] [sd_task/INFO] 9
-> [0.000000] [sd_task/INFO] 7->end
-> [0.000000] [test/INFO] ------------------- Schedule tasks ---------------------------
-> [0.000000] [test/INFO] ------------------- Run the schedule ---------------------------
-> [110.004162] [test/INFO] ------------------- Produce the trace file---------------------------
-> [110.004162] [test/INFO] Producing the trace of the run into dag.trace
-
-$ cat ${srcdir:=.}/dag-dotload/dag.trace
-> [0.000000->0.000000] node-0.simgrid.org compute 0.000000 flops # root
-> [0.000000->10.000000] node-1.simgrid.org compute 10000000129.452715 flops # 0
-> [10.000680->20.000680] node-10.simgrid.org compute 10000000131.133657 flops # 1
-> [20.001360->30.001360] node-11.simgrid.org compute 10000000121.124870 flops # 2
-> [30.002040->40.002041] node-12.simgrid.org compute 10000000230.608025 flops # 3
-> [40.002041->50.002041] node-13.simgrid.org compute 10000000004.994019 flops # 4
-> [50.002721->60.002721] node-14.simgrid.org compute 10000000046.016401 flops # 5
-> [60.002721->70.002721] node-15.simgrid.org compute 10000000091.598791 flops # 6
-> [70.003401->80.003401] node-16.simgrid.org compute 10000000040.679438 flops # 7
-> [80.004161->90.004161] node-17.simgrid.org compute 10000000250.490017 flops # 8
-> [90.004161->100.004161] node-18.simgrid.org compute 10000000079.267649 flops # 9
-> [10.000000 -> 10.000680] node-1.simgrid.org -> node-10.simgrid.org transfer of 10001 bytes # 0->1
-> [20.000680 -> 20.001360] node-10.simgrid.org -> node-11.simgrid.org transfer of 10004 bytes # 1->2
-> [30.001360 -> 30.002040] node-11.simgrid.org -> node-12.simgrid.org transfer of 10002 bytes # 2->3
-> [50.002041 -> 50.002721] node-13.simgrid.org -> node-14.simgrid.org transfer of 10029 bytes # 4->5
-> [70.002721 -> 70.003401] node-15.simgrid.org -> node-16.simgrid.org transfer of 10005 bytes # 6->7
-> [80.003401 -> 80.004161] node-16.simgrid.org -> node-17.simgrid.org transfer of 10000 bytes # 7->8
-> [80.003401 -> 80.084193] node-16.simgrid.org -> node-0.simgrid.org transfer of 10014000 bytes # 7->end
-> [0.000000 -> 0.080712] node-0.simgrid.org -> node-14.simgrid.org transfer of 10014000 bytes # root->5
-> [100.004161->110.004162] node-0.simgrid.org compute 10000000129.452715 flops # end
-
-$ rm -f ${srcdir:=.}/dag-dotload/dag.trace ${srcdir:=.}/dot.dot
-
! expect return 2
$ ${bindir:=.}/dag-dotload/sd_dag-dotload --log=no_loc ${srcdir:=.}/../../platforms/cluster_backbone.xml ${srcdir:=.}/dag-dotload/dag_with_cycle.dot
> [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.