Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add proper error checking.
[simgrid.git] / examples / smpi / energy / f90 / sef90.f90
1 ! Copyright (c) 2013-2014. The SimGrid Team.
2 ! All rights reserved.
3
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.
6
7 program main
8   use mpi
9
10   integer ierr
11   integer rank, pstates
12   integer i
13   double precision p, t, e
14
15   call MPI_Init(ierr)
16   if (ierr .ne. MPI_SUCCESS) then
17      print *, 'MPI_Init failed:', ierr
18      stop 1
19   endif
20   call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
21   if (ierr .ne. MPI_SUCCESS) then
22      print *, 'MPI_Comm_rank failed:', ierr
23      call MPI_Abort(MPI_COMM_WORLD, 1, ierr)
24      stop 1
25   endif
26
27   pstates = smpi_get_host_nb_pstates()
28
29   t = MPI_Wtime()
30
31   print *, '[', t, '] [rank ', rank, ']', pstates, 'pstates available'
32   do i = 0, pstates - 1
33      p = smpi_get_host_power_peak_at(i)
34      print *, '[', t, '] [rank ', rank, '] Power: ', p
35   end do
36
37   do i = 0, pstates - 1
38      call smpi_set_host_power_peak_at(i)
39      t = MPI_Wtime()
40      p = smpi_get_host_current_power_peak()
41      print *, '[', t, '] [rank ', rank, '] Current pstate: ', i, '; Current power: ', p
42
43      e = 1e9
44      call smpi_execute_flops(e)
45
46      t = MPI_Wtime()
47      e = smpi_get_host_consumed_energy()
48      print *, '[', t, '] [rank ', rank, '] Energy consumed (Joules): ', e
49   end do
50
51   call MPI_Finalize(ierr)
52   if (ierr .ne. MPI_SUCCESS) then
53      print *, 'MPI_Finalize failed:', ierr
54      call MPI_Abort(MPI_COMM_WORLD, 1, ierr)
55      stop 1
56   endif
57
58 end program main