static int master(int argc, char *argv[]) { long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s"); double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s"); double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s"); long workers_count = xbt_str_parse_int(argv[4], "Invalid amount of workers: %s"); //setting the variable "is_master" (previously declared) to value 1 TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "is_master", 1); TRACE_mark("msmark", "start_send_tasks"); for (int i = 0; i < number_of_tasks; i++) { msg_task_t task = NULL; task = MSG_task_create("task", task_comp_size, task_comm_size, NULL); //setting the variable "task_creation" to value i TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "task_creation", i); //setting the category of task to "compute" //the category of a task must be defined before it is sent or executed MSG_task_set_category(task, "compute"); MSG_task_send(task, "master_mailbox"); } TRACE_mark("msmark", "finish_send_tasks"); for (int i = 0; i < workers_count; i++) { msg_task_t finalize = MSG_task_create("finalize", 0, 0, 0); MSG_task_set_category(finalize, "finalize"); MSG_task_send(finalize, "master_mailbox"); } return 0; }
static int master(int argc, char *argv[]) { long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s"); long workers_count = xbt_str_parse_int(argv[4], "Invalid amount of workers: %s"); for (int i = 0; i < number_of_tasks; i++) { msg_task_t task = NULL; /* creating task and setting its category */ if (i % 2) { task = MSG_task_create("task_compute", 10000000, 0, NULL); MSG_task_set_category(task, "compute"); } else if (i % 3) { task = MSG_task_create("task_request", 10, 10, NULL); MSG_task_set_category(task, "request"); } else { task = MSG_task_create("task_data", 10, 10000000, NULL); MSG_task_set_category(task, "data"); } MSG_task_send(task, "master_mailbox"); } for (int i = 0; i < workers_count; i++) { msg_task_t finalize = MSG_task_create("finalize", 0, 1000, 0); MSG_task_set_category(finalize, "finalize"); MSG_task_send(finalize, "master_mailbox"); } return 0; }
/** Emitter function */ int master(int argc, char *argv[]) { long number_of_tasks = atol(argv[1]); double task_comp_size = atof(argv[2]); double task_comm_size = atof(argv[3]); long slaves_count = atol(argv[4]); //setting the variable "is_master" (previously declared) to value 1 TRACE_host_variable_set("is_master", 1); TRACE_mark("msmark", "start_send_tasks"); int i; for (i = 0; i < number_of_tasks; i++) { m_task_t task = NULL; task = MSG_task_create("task", task_comp_size, task_comm_size, NULL); //setting the variable "task_creation" to value i TRACE_host_variable_set("task_creation", i); //setting the category of task to "compute" //the category of a task must be defined before it is sent or executed TRACE_msg_set_task_category(task, "compute"); MSG_task_send(task, "master_mailbox"); } TRACE_mark("msmark", "finish_send_tasks"); for (i = 0; i < slaves_count; i++) { m_task_t finalize = MSG_task_create("finalize", 0, 0, 0); TRACE_msg_set_task_category(finalize, "finalize"); MSG_task_send(finalize, "master_mailbox"); } return 0; }
/** Emitter function */ int master(int argc, char *argv[]) { long number_of_tasks = atol(argv[1]); long slaves_count = atol(argv[4]); int i; for (i = 0; i < number_of_tasks; i++) { m_task_t task = NULL; //creating task and setting its category if (i % 2) { task = MSG_task_create("task_compute", 10000000, 0, NULL); TRACE_msg_set_task_category(task, "compute"); } else if (i % 3) { task = MSG_task_create("task_request", 10, 10, NULL); TRACE_msg_set_task_category(task, "request"); } else { task = MSG_task_create("task_data", 10, 10000000, NULL); TRACE_msg_set_task_category(task, "data"); } MSG_task_send(task, "master_mailbox"); } for (i = 0; i < slaves_count; i++) { m_task_t finalize = MSG_task_create("finalize", 0, 1000, 0); TRACE_msg_set_task_category(finalize, "finalize"); MSG_task_send(finalize, "master_mailbox"); } return 0; }
static int coordinator(int argc, char *argv[]) { int CS_used = 0; // initially the CS is idle while (1) { msg_task_t task = NULL; MSG_task_receive(&task, "coordinator"); const char *kind = MSG_task_get_name(task); //is it a request or a release? if (!strcmp(kind, "request")) { // that's a request char *req = MSG_task_get_data(task); if (CS_used) { XBT_INFO("CS already used."); msg_task_t answer = MSG_task_create("not grant", 0, 1000, NULL); MSG_task_send(answer, req); } else { // can serve it immediately XBT_INFO("CS idle. Grant immediately"); msg_task_t answer = MSG_task_create("grant", 0, 1000, NULL); MSG_task_send(answer, req); CS_used = 1; } } else { // that's a release. Check if someone was waiting for the lock XBT_INFO("CS release. resource now idle"); CS_used = 0; } MSG_task_destroy(task); kind = NULL; } return 0; }
/** Emitter function */ int master(int argc, char *argv[]) { int i; for (i = 1; i <= number_of_jobs; i++) { char mailbox[256]; char sprintf_buffer[256]; msg_task_t task = NULL; sprintf(mailbox, "slave-%ld", i % number_of_slaves); sprintf(sprintf_buffer, "Task_%d", i); task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL); XBT_DEBUG("Sending \"%s\" (of %ld) to mailbox \"%s\"", task->name, number_of_jobs, mailbox); MSG_task_send(task, mailbox); } XBT_DEBUG ("All tasks have been dispatched. Let's tell everybody the computation is over."); for (i = 0; i < number_of_slaves; i++) { char mailbox[80]; sprintf(mailbox, "slave-%ld", i % number_of_slaves); msg_task_t finalize = MSG_task_create("finalize", 0, 0, 0); MSG_task_send(finalize, mailbox); } XBT_DEBUG("Goodbye now!"); return 0; } /* end_of_master */
/** Emitter function */ int master(int argc, char *argv[]) { long number_of_tasks = atol(argv[1]); double task_comp_size = atof(argv[2]); double task_comm_size = atof(argv[3]); long slaves_count = atol(argv[4]); XBT_INFO("master %ld %f %f %ld", number_of_tasks, task_comp_size, task_comm_size, slaves_count); int i; for (i = 0; i < number_of_tasks; i++) { char task_name[100]; snprintf (task_name, 100, "task-%d", i); m_task_t task = NULL; task = MSG_task_create(task_name, task_comp_size, task_comm_size, NULL); //setting the category of task to "compute" //the category of a task must be defined before it is sent or executed TRACE_msg_set_task_category(task, "compute"); MSG_task_send(task, "master_mailbox"); } for (i = 0; i < slaves_count; i++) { char task_name[100]; snprintf (task_name, 100, "task-%d", i); m_task_t finalize = MSG_task_create(task_name, 0, 0, xbt_strdup("finalize")); TRACE_msg_set_task_category(finalize, "finalize"); MSG_task_send(finalize, "master_mailbox"); } return 0; }
int host(int argc, char *argv[]) { int host_number = atoi(MSG_process_get_name(MSG_process_self())); char mailbox[256]; msg_task_t task = NULL; XBT_ATTRIB_UNUSED int res; if (host_number == 0) { //master send then receive sprintf(mailbox, "%d", host_number+1); task = MSG_task_create("Token", task_comp_size, task_comm_size, NULL); XBT_INFO("Host \"%d\" send '%s' to Host \"%s\"",host_number,task->name,mailbox); MSG_task_send(task, mailbox); task = NULL; res = MSG_task_receive(&(task), MSG_process_get_name(MSG_process_self())); xbt_assert(res == MSG_OK, "MSG_task_get failed"); XBT_INFO("Host \"%d\" received \"%s\"",host_number, MSG_task_get_name(task)); MSG_task_destroy(task); } else { //slave receive then send res = MSG_task_receive(&(task), MSG_process_get_name(MSG_process_self())); xbt_assert(res == MSG_OK, "MSG_task_get failed"); XBT_INFO("Host \"%d\" received \"%s\"",host_number, MSG_task_get_name(task)); if(host_number+1 == nb_hosts) sprintf(mailbox, "0"); else sprintf(mailbox, "%d", host_number+1); XBT_INFO("Host \"%d\" send '%s' to Host \"%s\"",host_number,task->name,mailbox); MSG_task_send(task, mailbox); } return 0; }
static int client(int argc, char *argv[]) { int my_pid = MSG_process_get_PID(MSG_process_self()); char *my_mailbox = xbt_strdup(argv[1]); msg_task_t grant = NULL, release = NULL; while(1){ XBT_INFO("Ask the request"); MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), "coordinator"); if(strcmp(my_mailbox, "1") == 0){ r = 1; cs = 0; XBT_INFO("Propositions changed : r=1, cs=0"); } MSG_task_receive(&grant, my_mailbox); const char *kind = MSG_task_get_name(grant); if((strcmp(my_mailbox, "1") == 0) && (strcmp("grant", kind) == 0)){ cs = 1; r = 0; XBT_INFO("Propositions changed : r=0, cs=1"); } MSG_task_destroy(grant); grant = NULL; kind = NULL; XBT_INFO("%s got the answer. Sleep a bit and release it", argv[1]); MSG_process_sleep(1); release = MSG_task_create("release", 0, 1000, NULL); MSG_task_send(release, "coordinator"); release = NULL; MSG_process_sleep(my_pid); if(strcmp(my_mailbox, "1") == 0){ cs=0; r=0; XBT_INFO("Propositions changed : r=0, cs=0"); } } return 0; }
int client(int argc, char *argv[]) { msg_task_t task1 = MSG_task_create("task", 0, 10000, (void *) atol(argv[1])); msg_task_t task2 = MSG_task_create("task", 0, 10000, (void *) atol(argv[1])); XBT_INFO("Send %d!", atoi(argv[1])); MSG_task_send(task1, "mymailbox"); XBT_INFO("Send %d!", atoi(argv[1])); MSG_task_send(task2, "mymailbox"); return 0; }
static int ponger(int argc, char *argv[]) { XBT_INFO("Pong -> %s", argv[1]); xbt_assert(MSG_host_by_name(argv[1]) != NULL, "Unknown host %s. Stopping Now! ", argv[1]); /* - Receive the (small) ping first ....*/ msg_task_t ping_task = NULL; int a = MSG_task_receive(&ping_task, MSG_host_get_name(MSG_host_self())); xbt_assert(a == MSG_OK, "Unexpected behavior"); double sender_time = *((double *) (ping_task->data)); double communication_time = MSG_get_clock() - sender_time; XBT_INFO("Task received : %s", ping_task->name); xbt_free(ping_task->data); MSG_task_destroy(ping_task); XBT_INFO(" Ping time (latency bound) %e", communication_time); /* - ... Then send a 1GB pong back (bandwidth bound) */ double time = MSG_get_clock(); msg_task_t pong_task = MSG_task_create("large communication (bandwidth bound)", 0.0, 1e9, NULL); pong_task->data = xbt_new(double, 1); *(double *) pong_task->data = time; XBT_INFO("task_bw->data = %e", *((double *) pong_task->data)); MSG_task_send(pong_task, argv[1]); return 0; }
// this function permit to send to the node "mailbox" the task number i void send_task(int i, char * mailbox, char * myMailbox) { msg_task_t task = NULL; char task_name[TASK_NAME_SIZE]; struct clientDataTask * data = (struct clientDataTask *) malloc(sizeof(struct clientDataTask)); //printf("%s: I send a request to %s\n", myMailbox, mailbox); sprintf(task_name, "task-%d", i); strcpy(data->mailbox, myMailbox); if (random_target_LOC == NOT_RANDOM) { if (simulator == ARANTES) { data->target_LOC = value_target_LOC_stationary; data->rangeReputationPrimaryToRequest = 0.1; } else { data->target_LOC = value_target_LOC_stationary; data->rangeReputationPrimaryToRequest = 0.90; } } else { if (simulator == ARANTES) { data->target_LOC = (double)(rand() % 51) / 100.0; data->rangeReputationPrimaryToRequest = 0.1; } else { data->target_LOC = (50.0 + ((double)(rand() % 51))) / 100.0; data->rangeReputationPrimaryToRequest = 0.1; } } data->start_time = MSG_get_clock(); task = MSG_task_create (task_name, task_compute_duration, task_message_size, data); MSG_task_send(task, mailbox); }
static int client(int argc, char *argv[]) { int my_pid = MSG_process_get_PID(MSG_process_self()); char *my_mailbox = xbt_strdup(argv[1]); while(1){ XBT_INFO("Client (%s) asks the request", my_mailbox); MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), "coordinator"); msg_task_t answer = NULL; MSG_task_receive(&answer, my_mailbox); const char* kind = MSG_task_get_name(answer); if (!strcmp(kind, "grant")) { XBT_INFO("Client (%s) got the answer (grant). Sleep a bit and release it", my_mailbox); if(!strcmp(my_mailbox, "1")) cs = 1; }else{ XBT_INFO("Client (%s) got the answer (not grant). Try again", my_mailbox); } MSG_task_destroy(answer); kind = NULL; MSG_process_sleep(my_pid); } return 0; }
static int master(int argc, char *argv[]) { msg_task_t task = NULL; // I am the master of emigrant process, // I tell it where it must emigrate to. xbt_dynar_t destinations = xbt_dynar_new (sizeof(char*), &xbt_free_ref); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Tremblay")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Jupiter")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Fafard")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Ginette")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Bourassa")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Fafard")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Tremblay")); xbt_dynar_push_as (destinations, char*, xbt_strdup ("Ginette")); xbt_dynar_push_as (destinations, char*, NULL); char *destination; unsigned int i; xbt_dynar_foreach(destinations, i, destination){ task = MSG_task_create("task", 0, 0, NULL); if (destination){ MSG_task_set_data(task, xbt_strdup (destination)); } MSG_task_set_category(task, "migration_order"); MSG_task_send (task, "master_mailbox"); task = NULL; }
static int pinger(int argc, char *argv[]) { xbt_assert(argc==2, "The pinger function one argument from the XML deployment file"); XBT_INFO("Ping -> %s", argv[1]); xbt_assert(MSG_host_by_name(argv[1]) != NULL, "Unknown host %s. Stopping Now! ", argv[1]); /* - Do the ping with a 1-Byte task (latency bound) ... */ double now = MSG_get_clock(); msg_task_t ping_task = MSG_task_create("small communication (latency bound)", 0.0, 1, NULL); ping_task->data = xbt_new(double, 1); *(double *) ping_task->data = now; MSG_task_send(ping_task, argv[1]); /* - ... then wait for the (large) pong */ msg_task_t pong_task = NULL; int a = MSG_task_receive(&pong_task,MSG_host_get_name(MSG_host_self())); xbt_assert(a == MSG_OK, "Unexpected behavior"); double sender_time = *((double *) (pong_task->data)); double communication_time = MSG_get_clock() - sender_time; XBT_INFO("Task received : %s", pong_task->name); xbt_free(pong_task->data); MSG_task_destroy(pong_task); XBT_INFO("Pong time (bandwidth bound): %e", communication_time); return 0; }
int slave(int argc, char *argv[]) { m_task_t task_s = NULL; m_task_t task_r = NULL; unsigned int task_comp_size = 50000000; unsigned int task_comm_size = 1000000; char mailbox[80]; char buffer[20]; int num = atoi(argv[1]); sprintf(mailbox, "host%d", num); MSG_task_receive(&(task_r), mailbox); XBT_INFO("Received \"%s\"", MSG_task_get_name(task_r)); sprintf(mailbox, "host%d", num+1); if(num == totalHosts-1) sprintf(mailbox, "host%d", 0); sprintf(buffer, "Token"); task_s = MSG_task_create(buffer, task_comp_size, task_comm_size, NULL); MSG_task_send(task_s, mailbox); XBT_INFO("Send Data to \"%s\"", mailbox); return 0; }
/** Receiver function */ int worker(int argc, char *argv[]) { msg_task_t task = NULL; _XBT_GNUC_UNUSED int res; char channel[1024]; const char *my_master = MSG_process_get_data(MSG_process_self()); build_channel_name(channel, my_master, MSG_host_get_name(MSG_host_self())); XBT_DEBUG("Receiving on channel \"%s\"", channel); while (1) { /* Send a request */ msg_task_t request = MSG_task_create("request", 0, 0, MSG_host_self()); MSG_task_send(request, my_master); res = MSG_task_receive(&(task),channel); xbt_assert(res == MSG_OK, "MSG_task_receive failed"); XBT_DEBUG("Received \"%s\"", MSG_task_get_name(task)); if (!strcmp(MSG_task_get_name(task), "finalize")) { MSG_task_destroy(task); break; } XBT_DEBUG("Processing \"%s\"", MSG_task_get_name(task)); MSG_task_execute(task); XBT_DEBUG("\"%s\" done", MSG_task_get_name(task)); MSG_task_destroy(task); task = NULL; } XBT_DEBUG("I'm done. See you!"); return 0; } /* end_of_worker */
/** Master expects 3+ arguments given in the XML deployment file: */ static int master(int argc, char* argv[]) { long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s"); /** - Number of tasks */ double comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s"); /** - Task compute cost */ double comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s"); /** - Task communication size */ /* Create the tasks in advance */ msg_task_t* todo = xbt_new0(msg_task_t, number_of_tasks); for (int i = 0; i < number_of_tasks; i++) { char sprintf_buffer[64]; sprintf(sprintf_buffer, "Task_%d", i); todo[i] = MSG_task_create(sprintf_buffer, comp_size, comm_size, NULL); } /* Get the info about the worker processes from my parameters */ int worker_count = argc - 4; msg_host_t* workers = xbt_new0(msg_host_t, worker_count); for (int i = 4; i < argc; i++) { workers[i - 4] = MSG_get_host_by_name(argv[i]); xbt_assert(workers[i - 4] != NULL, "Unknown host %s. Stopping Now! ", argv[i]); } XBT_INFO("Got %d workers and %ld tasks to process", worker_count, number_of_tasks); /* Dispatch the tasks */ for (int i = 0; i < number_of_tasks; i++) { XBT_INFO("Sending '%s' to '%s'", todo[i]->name, MSG_host_get_name(workers[i % worker_count])); if (MSG_host_self() == workers[i % worker_count]) { XBT_INFO("Hey ! It's me ! :)"); } MSG_task_send(todo[i], MSG_host_get_name(workers[i % worker_count])); XBT_INFO("Sent"); } XBT_INFO("All tasks have been dispatched. Let's tell everybody the computation is over."); for (int i = 0; i < worker_count; i++) { msg_task_t finalize = MSG_task_create("finalize", 0, 0, FINALIZE); MSG_task_send(finalize, MSG_host_get_name(workers[i])); } XBT_INFO("Goodbye now!"); free(workers); free(todo); return 0; }
static int sender_fun(int argc, char *argv[]) { XBT_INFO("Sending"); MSG_task_send(MSG_task_create("Blah", 0.0, 0.0, NULL), MSG_host_get_name(MSG_host_self())); MSG_process_sleep(1.); /* FIXME: if the sender exits before the receiver calls get_sender(), bad thing happens */ XBT_INFO("Exiting"); return 0; }
static int coordinator(int argc, char *argv[]) { int CS_used = 0; msg_task_t task = NULL, answer = NULL; xbt_dynar_t requests = xbt_dynar_new(sizeof(char *), NULL); char *req; while(1){ MSG_task_receive(&task, "coordinator"); const char *kind = MSG_task_get_name(task); if (!strcmp(kind, "request")) { req = MSG_task_get_data(task); if (CS_used) { XBT_INFO("CS already used. Queue the request."); xbt_dynar_push(requests, &req); } else { if(strcmp(req, "1") != 0){ XBT_INFO("CS idle. Grant immediatly"); answer = MSG_task_create("grant", 0, 1000, NULL); MSG_task_send(answer, req); CS_used = 1; answer = NULL; } } } else { if (!xbt_dynar_is_empty(requests)) { XBT_INFO("CS release. Grant to queued requests (queue size: %lu)", xbt_dynar_length(requests)); xbt_dynar_shift(requests, &req); if(strcmp(req, "1") != 0){ MSG_task_send(MSG_task_create("grant", 0, 1000, NULL), req); }else{ xbt_dynar_push(requests, &req); CS_used = 0; } }else{ XBT_INFO("CS release. resource now idle"); CS_used = 0; } } MSG_task_destroy(task); task = NULL; kind = NULL; req = NULL; } return 0; }
int job_requester(int argc, char* argv[]){ /** @type simgrid process (run on all tiers) Every @timeout checks amount of free (non running) cores. If this amount is greater than some N then it sends a job request to scheduler to get new batch of jobs. Simgrid process parameters: -------------------------- None */ std::string host_name = MSG_host_get_name(MSG_host_self()); std::string CERN = "CERN"; msg_task_t task = NULL; double timeout = 1000; long freeCoreAmount; int fullCoreAmount = MSG_host_get_core_number(MSG_host_self()); MSG_process_sleep(0.01); while (1){ freeCoreAmount = fullCoreAmount - xbt_str_parse_int(MSG_host_get_property_value(MSG_host_self(), "activeCore"), "error") - xbt_str_parse_int(MSG_host_get_property_value(MSG_host_self(), "corruptedCore"), "error"); MSG_sem_acquire(sem_requester); if (GLOBAL_QUEUE->empty()){ MSG_sem_release(sem_requester); break; } if (freeCoreAmount > 0){ JobBatchRequest* jobRequest = new JobBatchRequest; jobRequest->coreAmount = freeCoreAmount; task = MSG_task_create("request", 0.0, MESSAGES_SIZE, jobRequest); plusLinkCounter(host_name, CERN); msg_error_t err = MSG_task_send(task, "scheduler"); switch(err){ case MSG_OK: minusLinkCounter(host_name, CERN); break; case MSG_TRANSFER_FAILURE: minusLinkCounter(host_name, CERN); MSG_task_destroy(task); task = NULL; break; case MSG_HOST_FAILURE: MSG_task_destroy(task); task = NULL; break; } }else MSG_sem_release(sem_requester); MSG_process_sleep(timeout); } return 0; }
static int client(int argc, char *argv[]) { msg_task_t task = MSG_task_create(argv[1], 0 /*comp cost */ , 10000 /*comm size */ , NULL /*arbitrary data */ ); MSG_task_send(task, "mymailbox"); XBT_INFO("Sent!"); return 0; }
static int client(int argc, char *argv[]) { msg_task_t task = MSG_task_create(argv[1], 0, 10000, NULL); MSG_task_send(task, "mymailbox"); XBT_INFO("Sent!"); return 0; }
static int sender(int argc, char *argv[]) { ensure_root_tid(); msg_task_t task_la = MSG_task_create("Some task", 0.0, 10e8, NULL); MSG_task_send(task_la, "some mailbox"); return 0; }
/** Emitter function */ int sender(int argc, char *argv[]) { msg_host_t host = NULL; double time; msg_task_t task_la = NULL; msg_task_t task_bw = NULL; char sprintf_buffer_la[64]; char sprintf_buffer_bw[64]; XBT_INFO("sender"); /*host = xbt_new0(msg_host_t,1); */ XBT_INFO("host = %s", argv[1]); host = MSG_get_host_by_name(argv[1]); if (host == NULL) { XBT_INFO("Unknown host %s. Stopping Now! ", argv[1]); abort(); } /* Latency */ time = MSG_get_clock(); sprintf(sprintf_buffer_la, "latency task"); task_la = MSG_task_create(sprintf_buffer_la, 0.0, task_comm_size_lat, NULL); task_la->data = xbt_new(double, 1); *(double *) task_la->data = time; XBT_INFO("task_la->data = %le", *((double *) task_la->data)); MSG_task_send(task_la, argv[1]); /* Bandwidth */ time = MSG_get_clock(); sprintf(sprintf_buffer_bw, "bandwidth task"); task_bw = MSG_task_create(sprintf_buffer_bw, 0.0, task_comm_size_bw, NULL); task_bw->data = xbt_new(double, 1); *(double *) task_bw->data = time; XBT_INFO("task_bw->data = %le", *((double *) task_bw->data)); MSG_task_send(task_bw, argv[1]); return 0; } /* end_of_client */
static void action_reduce(const char *const *action) { int i; char *reduce_identifier; char mailbox[80]; double comm_size = parse_double(action[2]); double comp_size = parse_double(action[3]); msg_task_t comp_task = NULL; const char *process_name; double clock = MSG_get_clock(); process_globals_t counters = (process_globals_t) MSG_process_get_data(MSG_process_self()); xbt_assert(communicator_size, "Size of Communicator is not defined, " "can't use collective operations"); process_name = MSG_process_get_name(MSG_process_self()); reduce_identifier = bprintf("reduce_%d", counters->reduce_counter++); if (!strcmp(process_name, "p0")) { XBT_DEBUG("%s: %s is the Root", reduce_identifier, process_name); msg_comm_t *comms = xbt_new0(msg_comm_t, communicator_size - 1); msg_task_t *tasks = xbt_new0(msg_task_t, communicator_size - 1); for (i = 1; i < communicator_size; i++) { sprintf(mailbox, "%s_p%d_p0", reduce_identifier, i); comms[i - 1] = MSG_task_irecv(&(tasks[i - 1]), mailbox); } MSG_comm_waitall(comms, communicator_size - 1, -1); for (i = 1; i < communicator_size; i++) { MSG_comm_destroy(comms[i - 1]); MSG_task_destroy(tasks[i - 1]); } xbt_free(comms); xbt_free(tasks); comp_task = MSG_task_create("reduce_comp", comp_size, 0, NULL); XBT_DEBUG("%s: computing 'reduce_comp'", reduce_identifier); MSG_task_execute(comp_task); MSG_task_destroy(comp_task); XBT_DEBUG("%s: computed", reduce_identifier); } else { XBT_DEBUG("%s: %s sends", reduce_identifier, process_name); sprintf(mailbox, "%s_%s_p0", reduce_identifier, process_name); XBT_DEBUG("put on %s", mailbox); MSG_task_send(MSG_task_create(reduce_identifier, 0, comm_size, NULL), mailbox); } log_action(action, MSG_get_clock() - clock); xbt_free(reduce_identifier); }
// Read src file on local disk and send a put message to remote host (size of message = size of src file) static int hsm_put(const char *remote_host, const char *src, const char *dest){ // Read local src file, and return the size that was actually read sg_size_t read_size = read_local_file(src); // Send file XBT_INFO("%s sends %llu to %s",MSG_host_get_name(MSG_host_self()),read_size,remote_host); msg_task_t to_execute = MSG_task_create((const char*)"hsm_put", 0, (double) read_size, (void*)dest); MSG_task_send(to_execute, remote_host); MSG_process_sleep(.4); return 1; }
/** master */ int master(int argc, char *argv[]) { char *slavename = NULL; double task_comm_size = 0; msg_task_t todo; char id_alias[10]; //unique id to control statistics int id = -1; xbt_assert(argc==4,"Strange number of arguments expected 3 got %d", argc - 1); XBT_DEBUG ("Master started"); /* data size */ int read; read = sscanf(argv[1], "%lg", &task_comm_size); xbt_assert(read, "Invalid argument %s\n", argv[1]); /* slave name */ slavename = argv[2]; id = atoi(argv[3]); sprintf(id_alias, "flow_%d", id); slavenames[id] = slavename; TRACE_category(id_alias); masternames[id] = MSG_host_get_name(MSG_host_self()); { /* Task creation. */ char sprintf_buffer[64] = "Task_0"; todo = MSG_task_create(sprintf_buffer, 100*task_comm_size, task_comm_size, NULL); MSG_task_set_category(todo, id_alias); //keep track of running tasks gl_task_array[id] = todo; gl_data_size[id] = task_comm_size; } { /* Process organisation */ MSG_get_host_by_name(slavename); } count_finished++; timer_start = 1 ; /* time measurement */ sprintf(id_alias, "%d", id); start_time = MSG_get_clock(); //MSG_task_execute(todo); MSG_task_send(todo, id_alias); end_time = MSG_get_clock(); XBT_DEBUG ("Finished"); return 0; } /* end_of_master */
static int sender(int argc, char *argv[]) { char* message_name = argv[1]; #ifndef DISABLE_THE_MUTEX xbt_mutex_acquire(mutex); #endif MSG_task_send(MSG_task_create(message_name, 0.0, 0.0, NULL), BOX_NAME); #ifndef DISABLE_THE_MUTEX xbt_mutex_release(mutex); #endif return 0; }
/** * @brief Send a task to a worker. * @param phase The current job phase. * @param tid The task ID. * @param data_src The ID of the DataNode that owns the task data. * @param wid The destination worker id. */ static void send_task (enum phase_e phase, size_t tid, size_t data_src, size_t wid) { char mailbox[MAILBOX_ALIAS_SIZE]; int i; double cpu_required = 0.0; msg_task_t task = NULL; task_info_t task_info; cpu_required = user.task_cost_f (phase, tid, wid); task_info = xbt_new (struct task_info_s, 1); task = MSG_task_create (SMS_TASK, cpu_required, 0.0, (void*) task_info); task_info->phase = phase; task_info->id = tid; task_info->src = data_src; task_info->wid = wid; task_info->task = task; task_info->shuffle_end = 0.0; task_info->start_time = MSG_get_clock(); task_info->finished_time = 0.0; task_info->elapsed_time = 0.0; task_info->cpu_time = 0.0; // for tracing purposes... MSG_task_set_category (task, (phase==MAP?"MAP":"REDUCE")); if (job.task_status[phase][tid] != T_STATUS_TIP_SLOW) job.task_status[phase][tid] = T_STATUS_TIP; job.heartbeats[wid].slots_av[phase]--; for (i = 0; i < MAX_SPECULATIVE_COPIES; i++) { if (job.task_list[phase][tid][i] == NULL) { job.task_list[phase][tid][i] = task; break; } } fprintf (tasks_log, "%d_%zu_%d,%s,%zu,%.3f,START,\n", phase, tid, i, (phase==MAP?"MAP":"REDUCE"), wid, MSG_get_clock ()); #ifdef VERBOSE XBT_INFO ("TX: %s > %s", SMS_TASK, MSG_host_get_name (config.workers[wid])); #endif sprintf (mailbox, TASKTRACKER_MAILBOX, wid); xbt_assert (MSG_task_send (task, mailbox) == MSG_OK, "ERROR SENDING MESSAGE"); job.task_instances[phase][tid]++; }