1 /* Copyright (c) 2010-2016. The SimGrid Team. All rights reserved. */
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. */
6 #include "simgrid/msg.h"
8 static int master(int argc, char *argv[])
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");
13 for (int i = 0; i < number_of_tasks; i++) {
14 msg_task_t task = NULL;
16 /* creating task and setting its category */
18 task = MSG_task_create("task_compute", 10000000, 0, NULL);
19 MSG_task_set_category(task, "compute");
21 task = MSG_task_create("task_request", 10, 10, NULL);
22 MSG_task_set_category(task, "request");
24 task = MSG_task_create("task_data", 10, 10000000, NULL);
25 MSG_task_set_category(task, "data");
27 MSG_task_send(task, "master_mailbox");
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");
39 static int worker(int argc, char *argv[])
41 msg_task_t task = NULL;
44 MSG_task_receive(&(task), "master_mailbox");
46 if (strcmp(MSG_task_get_name(task), "finalize") == 0) {
47 MSG_task_destroy(task);
51 MSG_task_execute(task);
52 MSG_task_destroy(task);
58 int main(int argc, char *argv[])
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]);
64 MSG_create_environment(argv[1]);
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
72 MSG_function_register("master", master);
73 MSG_function_register("worker", worker);
74 MSG_launch_application(argv[2]);