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. */
10 #include <smpi/smpi.h>
12 int main(int argc, char *argv[])
18 int err = MPI_Init(&argc, &argv);
19 if (err != MPI_SUCCESS) {
20 fprintf(stderr, "MPI_init failed: %d\n", err);
24 err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */
25 if (err != MPI_SUCCESS) {
26 fprintf(stderr, "MPI_Comm_rank failed: %d", err);
27 MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
31 int pstates = smpi_get_host_nb_pstates();
34 size_t sz = sizeof buf;
35 size_t x = snprintf(s, sz,
36 "[%.6f] [rank %d] Pstates: %d; Powers: %.0f",
37 MPI_Wtime(), rank, pstates, smpi_get_host_power_peak_at(0));
43 for (i = 1; i < pstates; i++) {
44 x = snprintf(s, sz, ", %.0f", smpi_get_host_power_peak_at(i));
51 fprintf(stderr, "%s%s\n", buf, (sz ? "" : " [...]"));
53 for (i = 0; i < pstates; i++) {
54 smpi_set_host_pstate(i);
55 fprintf(stderr, "[%.6f] [rank %d] Current pstate: %d; Current power: %.0f\n",
56 MPI_Wtime(), rank, i, smpi_get_host_current_power_peak());
58 SMPI_SAMPLE_FLOPS(1e9) {
59 /* imagine here some code running for 1e9 flops... */
62 fprintf(stderr, "[%.6f] [rank %d] Energy consumed: %g Joules.\n",
63 MPI_Wtime(), rank, smpi_get_host_consumed_energy());
67 if (err != MPI_SUCCESS) {
68 fprintf(stderr, "MPI_Finalize failed: %d\n", err);
69 MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);