[ET Trac] [Einstein Toolkit] #834: Provide access to CarpetLib timers
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Thu Apr 26 10:25:18 CDT 2012
#834: Provide access to CarpetLib timers
-------------------------+--------------------------------------------------
Reporter: hinder | Owner: eschnett
Type: enhancement | Status: new
Priority: major | Milestone:
Component: Carpet | Version:
Keywords: |
-------------------------+--------------------------------------------------
CarpetLib has several internal timers which contain useful information. I
would like to make this more accessible to the user. Currently, these
timers can be output by setting
CarpetLib::print_timestats_every = 1
and the timer output is written to files called
carpetlib-timing-statistics.NNNN.txt
This file is in a nonstandard format, contains lots of information, and is
difficult to interpret. It is also not realistic to have this output
enabled routinely in production simulations because there is one file per
process, which leads to large numbers of output files when running with
large numbers of processes. There is also no way currently to reduce the
information into a min/max/average, which is what we really care about
most of the time.
Cactus already has the ability to do the above if the timer values are
stored in grid arrays. I propose that CarpetLib should define some grid
arrays similar to those currently defined in Carpet for its timers. For
example,
{{{
CCTK_REAL timing TYPE=array DIM=1 SIZE=1 DISTRIB=constant
TAGS='checkpoint="no"'
{
sent_bytes_count
sent_bytes_per_second
received_bytes_count
received_bytes_per_second
comm_time
} "Per-processor timing information"
}}}
sent_bytes_count should come from commit_send_space::isend.
received_bytes_count should come from commstate::sizes_irecv. comm_time
should come from commstate::step. (Aside: Erik mentioned that the
hierarchy of these timer names is incorrect; this should be fixed.)
My aim is to be able to compare sent_bytes_per_second and
received_bytes_per_second with the advertised bandwidth of the
interconnect. For example, our own cluster has 5 GB/s full-duplex
bandwidth. I would like to display reductions of these variables on
standard output using CarpetIOBasic, and store these reductions in output
files using CarpetIOScalar. This allows me to see very easily whether the
communication is making efficient use of the hardware.
The timers I mentioned above would tell us about the actual time to
transmit data (or at least, as close as I can find), but does not include
any overheads introduced by processing the data before giving it to MPI.
We probably want to expose the overheads times as well.
When should these variables be updated from the CarpetLib timers? At what
point in the schedule, and how frequently?
How should the rates (sent_bytes_per_second etc) be computed? Carpet uses
a decaying average algorithm to compute its speeds. Does it make sense to
do something similar here?
Does it make sense to separate sent_bytes_per_second and
received_bytes_per_second, given that we only have the combined
communication time available?
It would probably also be useful to measure latency. Would
commstate::step:cnt be the correct number to measure, and if so, how
should this be expressed?
Does it make sense to provide these values in CarpetLib, or should Carpet
provide the infrastructure itself and get the information from the
CarpetLib timers?
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/834>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list