X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8e6b22bbbde4130f0b21491404f2af0f57df8019..905e26b959375a249abcfdf1599f6178fe031f44:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index e7317084f5..4d68d3d7d0 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -17,14 +17,15 @@ #include +#include + #include "src/mc/mc_replay.h" #include "smx_private.h" #include "src/mc/mc_forward.hpp" #include "xbt/ex.h" #include "mc/mc.h" #include "src/simix/smx_host_private.h" - -#include "src/simix/SynchroComm.hpp" +#include "src/kernel/activity/SynchroComm.hpp" #include @@ -205,7 +206,7 @@ e_smx_state_t simcall_execution_wait(smx_synchro_t execution) */ void* simcall_vm_create(const char *name, sg_host_t phys_host) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_create, name, phys_host)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_create, name, phys_host)); } /** @@ -216,7 +217,7 @@ void* simcall_vm_create(const char *name, sg_host_t phys_host) */ void simcall_vm_start(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_start, vm)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_start, vm)); } /** @@ -228,7 +229,7 @@ void simcall_vm_start(sg_host_t vm) */ int simcall_vm_get_state(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_get_state, vm)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_get_state, vm)); } /** @@ -240,17 +241,17 @@ int simcall_vm_get_state(sg_host_t vm) */ void *simcall_vm_get_pm(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_get_pm, vm)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_get_pm, vm)); } void simcall_vm_set_bound(sg_host_t vm, double bound) { - simgrid::simix::kernel(std::bind(SIMIX_vm_set_bound, vm, bound)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_set_bound, vm, bound)); } void simcall_vm_set_affinity(sg_host_t vm, sg_host_t pm, unsigned long mask) { - simgrid::simix::kernel(std::bind(SIMIX_vm_set_affinity, vm, pm, mask)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_set_affinity, vm, pm, mask)); } /** @@ -262,7 +263,7 @@ void simcall_vm_set_affinity(sg_host_t vm, sg_host_t pm, unsigned long mask) */ void simcall_vm_migrate(sg_host_t vm, sg_host_t host) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_migrate, vm, host)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_migrate, vm, host)); } /** @@ -328,7 +329,7 @@ void simcall_vm_shutdown(sg_host_t vm) */ void simcall_vm_destroy(sg_host_t vm) { - simgrid::simix::kernel(std::bind(SIMIX_vm_destroy, vm)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_destroy, vm)); } /** @@ -347,7 +348,7 @@ void simcall_vm_destroy(sg_host_t vm) */ void simcall_vm_migratefrom_resumeto(sg_host_t vm, sg_host_t src_pm, sg_host_t dst_pm) { - simgrid::simix::kernel(std::bind( + simgrid::simix::kernelImmediate(std::bind( SIMIX_vm_migratefrom_resumeto, vm, src_pm, dst_pm)); } @@ -440,29 +441,7 @@ void simcall_process_resume(smx_process_t process) */ int simcall_process_count(void) { - return simgrid::simix::kernel(SIMIX_process_count); -} - -/** - * \ingroup simix_process_management - * \brief Return the PID of a #smx_process_t. - * \param process a SIMIX process - * \return the PID of this process - */ -int simcall_process_get_PID(smx_process_t process) -{ - return SIMIX_process_get_PID(process); -} - -/** - * \ingroup simix_process_management - * \brief Return the parent PID of a #smx_process_t. - * \param process a SIMIX process - * \return the PID of this process parenrt - */ -int simcall_process_get_PPID(smx_process_t process) -{ - return SIMIX_process_get_PPID(process); + return simgrid::simix::kernelImmediate(SIMIX_process_count); } /** @@ -486,7 +465,7 @@ void* simcall_process_get_data(smx_process_t process) */ void simcall_process_set_data(smx_process_t process, void *data) { - simgrid::simix::kernel(std::bind(SIMIX_process_set_data, process, data)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_process_set_data, process, data)); } /** @@ -513,33 +492,6 @@ double simcall_process_get_kill_time(smx_process_t process) { return SIMIX_timer_get_date(process->kill_timer); } -/** - * \ingroup simix_process_management - * \brief Return the location on which an agent is running. - * - * This functions returns the sg_host_t corresponding to the location on which - * \a process is running. - * \param process SIMIX process - * \return SIMIX host - */ -sg_host_t simcall_process_get_host(smx_process_t process) -{ - return SIMIX_process_get_host(process); -} - -/** - * \ingroup simix_process_management - * \brief Return the name of an agent. - * - * This functions checks whether \a process is a valid pointer or not and return its name. - * \param process SIMIX process - * \return The process name - */ -const char* simcall_process_get_name(smx_process_t process) -{ - return SIMIX_process_get_name(process); -} - /** * \ingroup simix_process_management * \brief Returns true if the process is suspended . @@ -620,31 +572,6 @@ smx_mailbox_t simcall_mbox_create(const char *name) return simcall_BODY_mbox_create(name); } -/** - * \ingroup simix_mbox_management - * \brief Returns a rendez-vous point knowing its name - */ -smx_mailbox_t simcall_mbox_get_by_name(const char *name) -{ - /* FIXME: this is a horrible loss of performance, so we hack it out by - * skipping the simcall (for now). It works in parallel, it won't work on - * distributed but probably we will change MSG for that. */ - - return SIMIX_mbox_get_by_name(name); -} - -/** - * \ingroup simix_mbox_management - * \brief returns the communication at the head of the rendez-vous - * \param mbox The rendez-vous point - * \return The communication or nullptr if empty - */ -smx_synchro_t simcall_mbox_front(smx_mailbox_t mbox) -{ - - return mbox->comm_queue->empty()? nullptr:mbox->comm_queue->front(); -} - void simcall_mbox_set_receiver(smx_mailbox_t mbox, smx_process_t process) { simcall_BODY_mbox_set_receiver(mbox, process); @@ -756,8 +683,8 @@ smx_synchro_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, int src, int tag */ void simcall_comm_cancel(smx_synchro_t synchro) { - simgrid::simix::kernel([synchro]{ - simgrid::simix::Comm *comm = static_cast(synchro); + simgrid::simix::kernelImmediate([synchro]{ + simgrid::kernel::activity::Comm *comm = static_cast(synchro); comm->cancel(); }); } @@ -765,19 +692,19 @@ void simcall_comm_cancel(smx_synchro_t synchro) /** * \ingroup simix_comm_management */ -unsigned int simcall_comm_waitany(xbt_dynar_t comms) +unsigned int simcall_comm_waitany(xbt_dynar_t comms, double timeout) { - return simcall_BODY_comm_waitany(comms); + return simcall_BODY_comm_waitany(comms, timeout); } /** * \ingroup simix_comm_management */ -int simcall_comm_testany(xbt_dynar_t comms) +int simcall_comm_testany(smx_synchro_t* comms, size_t count) { - if (xbt_dynar_is_empty(comms)) + if (count == 0) return -1; - return simcall_BODY_comm_testany(comms); + return simcall_BODY_comm_testany(comms, count); } /** @@ -1090,7 +1017,12 @@ xbt_dict_t simcall_storage_get_content(smx_storage_t storage) void simcall_run_kernel(std::function const& code) { - return simcall_BODY_run_kernel(&code); + simcall_BODY_run_kernel(&code); +} + +void simcall_run_blocking(std::function const& code) +{ + simcall_BODY_run_blocking(&code); } int simcall_mc_random(int min, int max) { @@ -1103,3 +1035,15 @@ int simcall_mc_random(int min, int max) { const char *SIMIX_simcall_name(e_smx_simcall_t kind) { return simcall_names[kind]; } + +namespace simgrid { +namespace simix { + +void unblock(smx_process_t process) +{ + xbt_assert(SIMIX_is_maestro()); + SIMIX_simcall_answer(&process->simcall); +} + +} +}