X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/87abed69d2734abfc0474c30b6f6d04b25a2c8ac..d3c605045fe8c525f32393a054425d72edf47b18:/src/simgrid/host.cpp diff --git a/src/simgrid/host.cpp b/src/simgrid/host.cpp index 3c9fe63827..346a1c45b7 100644 --- a/src/simgrid/host.cpp +++ b/src/simgrid/host.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -12,15 +12,13 @@ #include "xbt/Extendable.hpp" #include "xbt/dict.h" -#include "src/kernel/routing/NetPoint.hpp" +#include "simgrid/kernel/routing/NetPoint.hpp" #include "src/simix/smx_host_private.hpp" #include "src/surf/HostImpl.hpp" #include "src/surf/cpu_interface.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sg_host, sd, "Logging specific to sg_hosts"); -extern "C" { - size_t sg_host_count() { return simgrid::s4u::Engine::getInstance()->getHostCount(); @@ -37,8 +35,12 @@ size_t sg_host_count() */ sg_host_t *sg_host_list() { xbt_assert(sg_host_count() > 0, "There is no host!"); + std::vector hosts = simgrid::s4u::Engine::getInstance()->getAllHosts(); + + sg_host_t* res = (sg_host_t*)malloc(sizeof(sg_host_t) * hosts.size()); + memcpy(res, hosts.data(), sizeof(sg_host_t) * hosts.size()); - return (sg_host_t*)xbt_dynar_to_array(sg_hosts_as_dynar()); + return res; } const char *sg_host_get_name(sg_host_t host) @@ -71,8 +73,7 @@ xbt_dynar_t sg_hosts_as_dynar() { xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t),nullptr); - std::vector list; - simgrid::s4u::Engine::getInstance()->getHostList(&list); + std::vector list = simgrid::s4u::Engine::getInstance()->getAllHosts(); for (auto const& host : list) { if (host && host->pimpl_netpoint && host->pimpl_netpoint->isHost()) @@ -126,6 +127,17 @@ double sg_host_speed(sg_host_t host) return host->getSpeed(); } +/** \brief Return the speed of the processor (in flop/s) at a given pstate. See also @ref plugin_energy. + * + * \param host host to test + * \param pstate_index pstate to test + * \return Returns the processor speed associated with pstate_index + */ +double sg_host_get_pstate_speed(sg_host_t host, int pstate_index) +{ + return host->getPstateSpeed(pstate_index); +} + /** \ingroup m_host_management * \brief Return the number of cores. * @@ -306,4 +318,21 @@ void sg_host_dump(sg_host_t host) } } -} // extern "C" +/** \brief Return the list of actors attached to an host. + * + * \param host a host + * \param whereto a dynar in which we should push actors living on that host + */ +void sg_host_get_actor_list(sg_host_t host, xbt_dynar_t whereto) +{ + for (auto& actor : host->extension()->process_list) { + s4u_Actor* p = actor.ciface(); + xbt_dynar_push(whereto, &p); + } +} + +sg_host_t sg_host_self() +{ + smx_actor_t process = SIMIX_process_self(); + return (process == nullptr) ? nullptr : process->host; +}