X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/226d3997c4e356a1935b7d51b310034b4833afb9..8766df991f7d0239373084bfc4f0bfa17e4d9cc3:/src/msg/msg_gos.c diff --git a/src/msg/msg_gos.c b/src/msg/msg_gos.c index 4623eb68a1..c0cce18339 100644 --- a/src/msg/msg_gos.c +++ b/src/msg/msg_gos.c @@ -53,7 +53,7 @@ MSG_error_t MSG_task_execute(m_task_t task) p_simdata = SIMIX_process_self_get_data(self); simdata->isused=1; simdata->compute = - simcall_host_execute(task->name, p_simdata->m_host->simdata->smx_host, + simcall_host_execute(task->name, p_simdata->m_host->smx_host, simdata->computation_amount, simdata->priority); #ifdef HAVE_TRACING @@ -146,7 +146,7 @@ MSG_parallel_task_create(const char *name, int host_nb, simdata->comm_amount = communication_amount; for (i = 0; i < host_nb; i++) - simdata->host_list[i] = host_list[i]->simdata->smx_host; + simdata->host_list[i] = host_list[i]->smx_host; return task; } @@ -175,7 +175,7 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task) xbt_assert(simdata->host_nb, "This is not a parallel task. Go to hell."); - XBT_DEBUG("Parallel computing on %s", p_simdata->m_host->name); + XBT_DEBUG("Parallel computing on %s", SIMIX_host_get_name(p_simdata->m_host->smx_host)); simdata->isused=1; @@ -253,11 +253,27 @@ MSG_error_t MSG_process_sleep(double nb_sec) } /** \ingroup msg_task_usage - * \brief Receives a task from a mailbox from a specific host. + * \brief Deprecated function that used to receive a task from a mailbox from a specific host. * - * This is a blocking function, the execution flow will be blocked - * until the task is received. See #MSG_task_irecv - * for receiving tasks asynchronously. + * Sorry, this function is not supported anymore. That wouldn't be + * impossible to reimplement it, but we are lacking the time to do so ourselves. + * If you need this functionality, you can either: + * + * - implement the buffering mechanism on the user-level by queuing all messages + * received in the mailbox that do not match your expectation + * - change your application logic to leverage the mailboxes features. For example, + * if you have A receiving messages from B and C, you could have A waiting on + * mailbox "A" most of the time, but on "A#B" when it's waiting for specific + * messages from B and "A#C" when waiting for messages from C. You could even get A + * sometime waiting on all these mailboxes using @ref MSG_comm_waitany. You can find + * an example of use of this function in the @ref MSG_examples section. + * - Provide a proper patch to implement this functionality back in MSG. That wouldn't be + * very difficult actually. Check the function @ref MSG_mailbox_get_task_ext. During its call to + * simcall_comm_recv(), the 5th argument, match_fun, is NULL. Create a function that filters + * messages according to the host (that you will pass as sixth argument to simcall_comm_recv() + * and that your filtering function will receive as first parameter, and then, the filter could + * simply compare the host names, for example. After sufficient testing, provide an example that + * we could add to the distribution, and your first contribution to SimGrid is ready. Thanks in advance. * * \param task a memory location for storing a #m_task_t. * \param alias name of the mailbox to receive the task from @@ -367,12 +383,15 @@ msg_comm_t MSG_task_isend(m_task_t task, const char *alias) * * \param task a #m_task_t to send on another location. * \param alias name of the mailbox to sent the task to - * \param match_fun boolean function taking the match_data provided by sender (here), and the one of the receiver (if any) and returning whether they match + * \param match_fun boolean function which parameters are: + * - match_data_provided_here + * - match_data_provided_by_other_side_if_any + * - the_smx_action_describing_the_other_side * \param match_data user provided data passed to match_fun * \return the msg_comm_t communication created */ XBT_INLINE msg_comm_t MSG_task_isend_with_matching(m_task_t task, const char *alias, - int (*match_fun)(void*,void*), + int (*match_fun)(void*,void*, smx_action_t), void *match_data) { simdata_task_t t_simdata = NULL; @@ -454,8 +473,8 @@ void MSG_task_dsend(m_task_t task, const char *alias, void_f_pvoid_t cleanup) * * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() * to end the communication. - * - * \param task a memory location for storing a #m_task_t. + * + * \param task a memory location for storing a #m_task_t. has to be valid until the end of the communication. * \param name of the mailbox to receive the task on * \return the msg_comm_t communication created */ @@ -1014,7 +1033,7 @@ MSG_task_put_with_timeout(m_task_t task, m_host_t dest, && (channel < msg_global->max_channel), "Invalid channel %d", channel); - XBT_DEBUG("MSG_task_put_with_timout: Trying to send a task to '%s'", dest->name); + XBT_DEBUG("MSG_task_put_with_timout: Trying to send a task to '%s'", SIMIX_host_get_name(dest->smx_host)); return MSG_mailbox_put_with_timeout(MSG_mailbox_get_by_channel (dest, channel), task, timeout);