Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
3030c3a9e23b9baf89e833a689f8fb03e2e35319
[simgrid.git] / examples / msg / trace-categories / trace-categories.c
1 /* Copyright (c) 2010-2016. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "simgrid/msg.h"
7
8 static int master(int argc, char *argv[])
9 {
10   long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
11   long workers_count = xbt_str_parse_int(argv[4], "Invalid amount of workers: %s");
12
13   int i;
14   for (i = 0; i < number_of_tasks; i++) {
15     msg_task_t task = NULL;
16
17     /* creating task and setting its category */
18     if (i % 2) {
19       task = MSG_task_create("task_compute", 10000000, 0, NULL);
20       MSG_task_set_category(task, "compute");
21     } else if (i % 3) {
22       task = MSG_task_create("task_request", 10, 10, NULL);
23       MSG_task_set_category(task, "request");
24     } else {
25       task = MSG_task_create("task_data", 10, 10000000, NULL);
26       MSG_task_set_category(task, "data");
27     }
28     MSG_task_send(task, "master_mailbox");
29   }
30
31   for (i = 0; i < workers_count; i++) {
32     msg_task_t finalize = MSG_task_create("finalize", 0, 1000, 0);
33     MSG_task_set_category(finalize, "finalize");
34     MSG_task_send(finalize, "master_mailbox");
35   }
36
37   return 0;
38 }
39
40 static int worker(int argc, char *argv[])
41 {
42   msg_task_t task = NULL;
43
44   while (1) {
45     MSG_task_receive(&(task), "master_mailbox");
46
47     if (!strcmp(MSG_task_get_name(task), "finalize")) {
48       MSG_task_destroy(task);
49       break;
50     }
51
52     MSG_task_execute(task);
53     MSG_task_destroy(task);
54     task = NULL;
55   }
56   return 0;
57 }
58
59 int main(int argc, char *argv[])
60 {
61   MSG_init(&argc, argv);
62   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
63              "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
64
65   MSG_create_environment(argv[1]);
66
67   /* declaring user categories with RGB colors */
68   TRACE_category_with_color ("compute", "1 0 0"); //red
69   TRACE_category_with_color ("request", "0 1 0"); //green
70   TRACE_category_with_color ("data", "0 0 1");    //blue
71   TRACE_category_with_color ("finalize", "0 0 0");//black
72
73   MSG_function_register("master", master);
74   MSG_function_register("worker", worker);
75   MSG_launch_application(argv[2]);
76
77   MSG_main();
78   return 0;
79 }