1 /* Copyright (c) 2013-2021. 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. */
10 #include <smpi/smpi.h>
12 #include <simgrid/host.h>
13 #include <simgrid/plugins/energy.h>
15 int main(int argc, char *argv[])
20 int err = MPI_Init(&argc, &argv);
21 if (err != MPI_SUCCESS) {
22 fprintf(stderr, "MPI_init failed: %d\n", err);
26 err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */
27 if (err != MPI_SUCCESS) {
28 fprintf(stderr, "MPI_Comm_rank failed: %d", err);
29 MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
33 unsigned long pstates = sg_host_get_nb_pstates(sg_host_self());
36 size_t sz = sizeof buf;
37 size_t x = snprintf(s, sz, "[%.6f] [rank %d] Pstates: %lu; Powers: %.0f", MPI_Wtime(), rank, pstates,
38 sg_host_get_pstate_speed(sg_host_self(), 0));
44 for (unsigned long i = 1; i < pstates; i++) {
45 x = snprintf(s, sz, ", %.0f", sg_host_get_pstate_speed(sg_host_self(), i));
52 fprintf(stderr, "%s%s\n", buf, (sz ? "" : " [...]"));
54 for (unsigned long i = 0; i < pstates; i++) {
55 sg_host_set_pstate(sg_host_self(), i);
56 fprintf(stderr, "[%.6f] [rank %d] Current pstate: %lu; Current power: %.0f\n", MPI_Wtime(), rank, i,
57 sg_host_get_speed(sg_host_self()));
59 SMPI_SAMPLE_FLOPS(1e9) {
60 /* imagine here some code running for 1e9 flops... */
63 fprintf(stderr, "[%.6f] [rank %d] Energy consumed: %g Joules.\n",
64 MPI_Wtime(), rank, sg_host_get_consumed_energy(sg_host_self()));
68 if (err != MPI_SUCCESS) {
69 fprintf(stderr, "MPI_Finalize failed: %d\n", err);
70 MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);