Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
05cc67079aea03e17589a8450101359cb0c00589
[simgrid.git] / examples / simdag / sd_test.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "simdag/simdag.h"
4 #include "xbt/ex.h"
5
6 int main(int argc, char **argv) {
7   
8   /* initialisation of SD */
9   SD_init(&argc, argv);
10
11   if (argc < 2) {
12      printf ("Usage: %s platform_file\n", argv[0]);
13      printf ("example: %s msg_platform.xml\n", argv[0]);
14      exit(1);
15   }
16
17   /* creation of the environment */
18   char * platform_file = argv[1];
19   SD_create_environment(platform_file);
20
21   /* creation of the tasks and their dependencies */
22   SD_task_t taskA = SD_task_create("Task A", NULL, 10.0);
23   SD_task_t taskB = SD_task_create("Task B", NULL, 40.0);
24   SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
25   SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
26   
27
28   SD_task_dependency_add(NULL, NULL, taskB, taskA);
29   SD_task_dependency_add(NULL, NULL, taskC, taskA);
30   SD_task_dependency_add(NULL, NULL, taskD, taskB);
31   SD_task_dependency_add(NULL, NULL, taskD, taskC);
32   /*  SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock */
33
34   /* if everything is ok, no exception is forwarded or rethrown by main() */
35
36   /* watch points */
37   /*  SD_task_watch(taskB, SD_DONE);*/
38
39
40   /* let's launch the simulation! */
41
42   int workstation_number = 2;
43   SD_workstation_t *workstation_list = SD_workstation_get_list();
44   double computation_amount[] = {100, 200};
45   double communication_amount[] =
46     {
47       0, 30,
48       20, 0
49     };
50   double rate = 1;
51
52   SD_task_schedule(taskA, workstation_number, workstation_list,
53                    computation_amount, communication_amount, rate);
54   SD_task_schedule(taskB, workstation_number, workstation_list,
55                    computation_amount, communication_amount, rate);
56   SD_task_schedule(taskC, workstation_number, workstation_list,
57                    computation_amount, communication_amount, rate);
58   SD_task_schedule(taskD, workstation_number, workstation_list,
59                    computation_amount, communication_amount, rate);
60
61   printf("Launching simulation...\n");
62   SD_task_t *changed_tasks = SD_simulate(100);
63   int i = 0;
64   
65   printf("Simulation results:\n");
66   while(changed_tasks[i] != NULL) {
67     switch (SD_task_get_state(changed_tasks[i])) {
68     case SD_DONE:
69       printf("%s is done.\n", SD_task_get_name(changed_tasks[i]));
70       break;
71     case SD_FAILED:
72       printf("%s is failed.\n", SD_task_get_name(changed_tasks[i]));
73       break;
74     default:
75       printf("Unknown status for %s\n", SD_task_get_name(changed_tasks[i]));
76       break;
77     }
78     i++;
79   }
80   free(changed_tasks);
81
82   SD_task_destroy(taskA);
83   SD_task_destroy(taskB);
84   SD_task_destroy(taskC);
85   SD_task_destroy(taskD);
86   SD_exit();
87   return 0;
88 }