1 /* Copyright (c) 2013-2015. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
9 // FIXME: this plugin should be separated from the core
10 #include <simgrid/plugins/energy.h>
11 #include <simgrid/simix.h>
12 #include <simgrid/s4u/host.hpp>
14 #include <smpi/smpi.h>
16 #include "src/internal_config.h"
18 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_dvfs, smpi, "Logging specific to SMPI (experimental DVFS support)");
21 * \brief Return the speed of the processor (in flop/s) at a given pstate
23 * \param pstate_index pstate to test
24 * \return Returns the processor speed associated with pstate_index
26 double smpi_get_host_power_peak_at(int pstate_index)
28 return SIMIX_host_self()->getPstateSpeed(pstate_index);
32 * \brief Return the current speed of the processor (in flop/s)
34 * \return Returns the current processor speed
36 double smpi_get_host_current_power_peak()
38 return SIMIX_host_self()->getPstateSpeedCurrent();
42 * \brief Return the number of pstates defined for the current host
44 int smpi_get_host_nb_pstates()
46 return sg_host_get_nb_pstates(SIMIX_host_self());
50 * \brief Sets the pstate at which the processor should run
52 * \param pstate_index pstate to switch to
54 void smpi_set_host_pstate(int pstate_index)
56 sg_host_set_pstate(SIMIX_host_self(), pstate_index);
58 /** @brief Gets the pstate at which the processor currently running */
59 int smpi_get_host_pstate() {
60 return sg_host_get_pstate(SIMIX_host_self());
64 * \brief Return the total energy consumed by a host (in Joules)
66 * \return Returns the consumed energy
68 double smpi_get_host_consumed_energy() {
69 return sg_host_get_consumed_energy(SIMIX_host_self());
74 #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
76 typedef unsigned int uinteger;
78 typedef long int integer;
79 typedef unsigned long int uinteger;
81 typedef char *address;
82 typedef short int shortint;
84 typedef double doublereal;
94 extern "C" XBT_PUBLIC(doublereal) smpi_get_host_power_peak_at_(integer *pstate_index);
95 doublereal smpi_get_host_power_peak_at_(integer *pstate_index)
97 return static_cast<doublereal>(smpi_get_host_power_peak_at((int)*pstate_index));
100 extern "C" XBT_PUBLIC(doublereal) smpi_get_host_current_power_peak_();
101 doublereal smpi_get_host_current_power_peak_()
103 return smpi_get_host_current_power_peak();
106 extern "C" XBT_PUBLIC(integer) smpi_get_host_nb_pstates_();
107 integer smpi_get_host_nb_pstates_()
109 return static_cast<integer>(smpi_get_host_nb_pstates());
112 extern "C" XBT_PUBLIC(void) smpi_set_host_pstate_(integer *pstate_index);
113 void smpi_set_host_pstate_(integer *pstate_index)
115 smpi_set_host_pstate(static_cast<int>(*pstate_index));
118 extern "C" XBT_PUBLIC(doublereal) smpi_get_host_consumed_energy_();
119 doublereal smpi_get_host_consumed_energy_()
121 return static_cast<doublereal>(smpi_get_host_consumed_energy());