Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
merge
[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   for (int i = 0; i < number_of_tasks; i++) {
14     msg_task_t task = NULL;
15
16     /* creating task and setting its category */
17     if (i % 2) {
18       task = MSG_task_create("task_compute", 10000000, 0, NULL);
19       MSG_task_set_category(task, "compute");
20     } else if (i % 3) {
21       task = MSG_task_create("task_request", 10, 10, NULL);
22       MSG_task_set_category(task, "request");
23     } else {
24       task = MSG_task_create("task_data", 10, 10000000, NULL);
25       MSG_task_set_category(task, "data");
26     }
27     MSG_task_send(task, "master_mailbox");
28   }
29
30   for (int i = 0; i < workers_count; i++) {
31     msg_task_t finalize = MSG_task_create("finalize", 0, 1000, 0);
32     MSG_task_set_category(finalize, "finalize");
33     MSG_task_send(finalize, "master_mailbox");
34   }
35
36   return 0;
37 }
38
39 static int worker(int argc, char *argv[])
40 {
41   msg_task_t task = NULL;
42
43   while (1) {
44     MSG_task_receive(&(task), "master_mailbox");
45
46     if (!strcmp(MSG_task_get_name(task), "finalize")) {
47       MSG_task_destroy(task);
48       break;
49     }
50
51     MSG_task_execute(task);
52     MSG_task_destroy(task);
53     task = NULL;
54   }
55   return 0;
56 }
57
58 int main(int argc, char *argv[])
59 {
60   MSG_init(&argc, argv);
61   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
62              "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
63
64   MSG_create_environment(argv[1]);
65
66   /* declaring user categories with RGB colors */
67   TRACE_category_with_color ("compute", "1 0 0"); //red
68   TRACE_category_with_color ("request", "0 1 0"); //green
69   TRACE_category_with_color ("data", "0 0 1");    //blue
70   TRACE_category_with_color ("finalize", "0 0 0");//black
71
72   MSG_function_register("master", master);
73   MSG_function_register("worker", worker);
74   MSG_launch_application(argv[2]);
75
76   MSG_main();
77   return 0;
78 }