| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
| |
sync_barriers parameter
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Use int instead of CCTK_INT; all other arguments are also int.
Change argument order in Sync; move iteration next to reflevel.
Add iteration argument to BeforeRoutine; AfterRoutine also takes it.
Change name from cctk_iteration to iteration; no other variables have a cctk_ prefix.
Update callers in Carpet.
|
|
|
|
| |
something changes (readable string)
|
|
|
|
| |
Ensure requirements are met before restricting and syncing, not afterwards.
|
|
|
|
| |
Move requirement handling code out of Carpet and into a new thorn.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch provides a function interface for accelerator (GPU) devices
to be called at certain points when Carpet traverses the schedule
tree. This can be used to copy data between the host (CPU) and the
device (GPU) as it is needed.
---
Carpet/Carpet/interface.ccl | 28 ++++++++++++++++++++++++++++
Carpet/Carpet/param.ccl | 6 ++++++
Carpet/Carpet/src/CallFunction.cc | 12 ++++++++++++
Carpet/Carpet/src/Comm.cc | 8 ++++++++
Carpet/Carpet/src/Cycle.cc | 4 ++++
Carpet/Carpet/src/Evolve.cc | 2 ++
Carpet/Carpet/src/Initialise.cc | 2 ++
Carpet/Carpet/src/Requirements.cc | 34 ++++++++++++++++++++++------------
Carpet/Carpet/src/variables.cc | 3 +++
Carpet/Carpet/src/variables.hh | 3 +++
10 files changed, 90 insertions(+), 12 deletions(-)
|
|
|
|
|
|
|
|
|
| |
Introduce dist::barrier as low-level implementation of a named
barrier.
Use it in Carpet::NamedBarrier.
Use the above in almost all barrier calls.
|
| |
|
|
|
|
|
|
|
|
| |
Specifically, remove any hierarchy information that has been added to
the name of timers, as well as any code for creating timers
dynamically, as these are now unnecessary. Additionally, time some
previously-untimed parts of the code and make timer names in some
places more consistent.
|
|
|
|
|
|
|
|
| |
overwritten while prolongating/syncronizing. It looks liks this might be an MPI
implementation issue, but this is not clear. A barrier at this point seems to
be a sufficient workaround, and is now used on hopper. For more information
about this, ask Frank Loeffler <knarf@cct.lsu.edu>
Use the cpp flag CARPET_MPI_BARRIER_PROLONGATE_SYNC to enable this.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Store the current Cactus time (and not a fake Carpet time) in the th
"time hiearchy". This removes the now redundant "leveltimes" data
structure in Carpet.
Add past time levels to th, so that it can store the time for past
time levels instead of assuming the time step size is constant. This
allows changing the time step size during evolution.
Share the time hierarchy between all maps, instead of having one time
hierarchy per map.
Simplify the time level cycling and time stepping code used during
evolution.
Improve structure of the code that loops over time levels for certain
schedule bins. Introduce a new Carpet variable "timelevel", similar
to "reflevel".
This also makes it possible to avoid time interpolation for the past
time levels during regridding. The past time levels of the fine grid
then remain aligned (in time) with the past time levels of the coarse
grid. This is controlled by a new parameter
"time_interpolation_during_regridding", which defaults to "yes" for
backwards compatibility.
Simplify the three time level initialisation. Instead of initialising
all three time levels by taking altogether three time steps (forwards
and backwards), initialise only one past time level by taking one time
step backwards. The remaining time level is initialised during the
first time step of the evolution, which begins by cycling time levels,
which drops the non-initialised last time level anyway.
Update Carpet and the mode handling correspondingly.
Update the CarpetIOHDF5 checkpoint format correspondingly.
Update CarpetInterp, CarpetReduce, and CarpetRegrid2 correspondingly.
Update CarpetJacobi and CarpetMG correspondingly.
|
|
|
|
| |
Ignore-this: 309b4dd613f4af2b84aa5d6743fdb6b3
|
|
|
|
| |
Code not tested, still disabled.
|
| |
|
|
|
|
|
| |
Small clean-up to the code that handles accumulated floating point errors
in the physical time of the refinement levels.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Thorn InitBase specifies how initial data should be calculated. There
can be three possibilities:
init_some_levels: Set up at least one time level; other time levels
are scratch space
init_single_level: Set up exactly one time level; other time levels
are not acessed
init_all_levels: Set up all active time levels
Carpet checks this parameter and ensures that this setting is
consistent with Carpet's parameters
init_each_timelevel
init_fill_timelevels
init_3_timelevels
The new parameter init_fill_timelevels copies the current time level
into all past time levels, very similar to what
MoL::initial_data_is_crap does.
darcs-hash:20070706122545-dae7b-57ccca2954b1bd7ad98771e689c6c5b569c238cc.gz
|
|
|
|
| |
darcs-hash:20080130221742-dae7b-1f4a9ac00bbdee761e3f3782b5f61f875b72d964.gz
|
|
|
|
| |
darcs-hash:20080114152750-dae7b-8890d3f632101e83098124aa18ed48309a1880fe.gz
|
|
|
|
| |
darcs-hash:20070809202205-dae7b-baa50974f8519fcde0b1351b6bb3ea72606a6388.gz
|
|
|
|
| |
darcs-hash:20070523204632-dae7b-4fbd60dd4df3df4a167a11e18f183a35aaf3eedd.gz
|
|
|
|
|
|
|
|
|
| |
Add parameter sync_during_time_integration. This parameters disables
synchronisation during time integration, similar to the way in which
prolongation is disabled. This can potentially reduce communication
overhead.
darcs-hash:20061206163017-dae7b-953a43e45537fcac6acb2436cbcba3a1b75ee938.gz
|
|
|
|
|
|
|
|
|
|
|
| |
Don't panic, I replaced it by an overload function for CCTK_SyncGroupsByDirI()
which can synchronise multiple groups at a time.
This patch requires the most recent changes in the flesh API to provide the
new overloadable function CCTK_SyncGroupsByDirI(), as discussed in thread
http://www.cactuscode.org/old/pipermail/developers/2006-June/004933.html.
darcs-hash:20060706172438-776a0-a16f88e46597dde9d7899e5c4e69ed8cb420a13a.gz
|
|
|
|
| |
darcs-hash:20060613165631-dae7b-ee946f6a3fd2381cc6cef7c63c55f93d9dd0a038.gz
|
|
|
|
| |
darcs-hash:20060613165458-dae7b-c335eaea205f443dde2184366886a591e388028b.gz
|
|
|
|
|
|
|
| |
Algorithm from Lehner et al.
Original patch concept by Ian Hawke.
darcs-hash:20060603031952-dae7b-897df898e92d7e5807d1df6ab41e3a5d8869deeb.gz
|
|
|
|
| |
darcs-hash:20051119204024-dae7b-1dd3ef170658147d105f7bc8225bb963ce6d17d3.gz
|
|
|
|
| |
darcs-hash:20051119220634-dae7b-81914bcef43e866cdecf67cc151f41b6a9600ad9.gz
|
|
|
|
|
|
|
| |
This error aborted the run when enabling or disabling storage for grid arrays
when a refined grid is active.
darcs-hash:20051010204627-891bb-a3f201fe80dfeb286d5f2d8443b0729dd98955ed.gz
|
|
|
|
| |
darcs-hash:20051021170144-776a0-9ddbd39fc898bd30408dcf1f4c9dd00376785789.gz
|
|
|
|
|
|
|
|
|
| |
CarpetLib's comm_state class (actually, it's still just a struct) has been
extended to handle collective buffer communications for all possible C datatypes
at the same time. This makes it unnecessary for the higher-level communication
routines to loop over each individual datatype separately.
darcs-hash:20050815150023-776a0-dddc1aca7ccaebae872f9f451b2c3595cd951fed.gz
|
|
|
|
|
|
|
|
|
|
|
|
| |
When converting from physicsl time steps (delta_time) to Carpet's time
steps (th::delta_time), do not divide by abs(delta_time), but by
delta_time instead.
When evolving backwards in time while initialising three time levels,
change the sign of the physical time steps only, not the sign of
Carpet's time steps.
darcs-hash:20050809084940-891bb-2517b1568696c71278a98db6261515817a90247a.gz
|
|
|
|
| |
darcs-hash:20050808194745-891bb-74c3f74d1b5a5886ea63e11671aa7f425d5a8daa.gz
|
|
|
|
| |
darcs-hash:20050526125028-891bb-081be82930f38bb09853d20364ed75840f1fd61d.gz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The code to minimise the number of outstanding communication requests is
superseded by the collective buffers communication code. Therefore the
corresponding parameter has been deactivated (but not removed in order to keep
backwards compatibility with older checkpoints).
It is marked as deprecated in the param.ccl file and should not be used anymore
(use CarpetLib::use_collective_communication_buffers instead).
A level-2 warning of that meaning is printed at startup if the parameter is
still set in a user's parfile.
darcs-hash:20050411155524-776a0-ed9919869cc1f2821ab8b2fa23b4abea203b72ed.gz
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In one of my previous patches I accidentally added two bugs when optimising
the high-level synchronisation routines in Carpet:
* a SYNC statement did only synchronise the ghostzones
but forgot to prolongate the boundaries for grid functions
* SyncGroups() also tried to synchronise non-CCTK_GF variables
at multigrid and refinement levels other than 0
darcs-hash:20050407150044-776a0-46b495efd5b68ab401ad00c5ac705f786069022c.gz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Collective buffers are used to gather all components' data on a processor
before it gets send off to other processors in one go. This minimizes the
number of outstanding MPI communications down to O(N-1) and thus improves
overall efficiency as benchmarks show.
Each processor allocates a pair of single send/recv buffers to communicate
with all other processors. For this the class (actually, the struct) comm_state
was extended by 3 more states:
state_get_buffer_sizes: accumulates the sizes for the send/recv buffers
state_fill_send_buffers: gathers all the data into the send buffers
state_empty_recv_buffers: copies the data from the recv buffer back into
the processor's components
Send/recv buffers are exchanged during state_fill_send_buffers and
state_empty_recv_buffers. The constructor for a comm_state struct now takes
an argument <datatype> which denotes the CCTK datatype to use for the
attached collective buffers. If a negative value is passed here then it falls
back to using the old send/recv/wait communication scheme. The datatype
argument has a default value of -1 to maintain backwards compatibility to
existing code (which therefore will keep using the old scheme).
The new communication scheme is chosen by setting the parameter
CarpetLib::use_collective_communication_buffers to "yes". It defaults to "no"
meaning that the old send/recv/wait scheme is still used.
So far all the comm_state objects in the higher-level routines in thorn Carpet
(restriction/prolongation, regridding, synchronization) have been enabled to
use collective communication buffers.
Other thorns (CarpetInterp, CarpetIO*, CarpetSlab) will follow in separate
commits.
darcs-hash:20050330152811-776a0-51f426887fea099d1a67b42bd79e4f786979ba91.gz
|
|
|
|
|
|
| |
statements left that broke compiling Comm.cc
darcs-hash:20050317150756-776a0-d9e6719f3c75b27fe4aaa01a773e9db489a84a5c.gz
|
|
|
|
|
|
| |
into SyncGVGroup()
darcs-hash:20050316140925-3fd61-fd64d2290d26975fa5521f57f0d83442d5af7feb.gz
|
|
|
|
| |
darcs-hash:20050316123248-3fd61-b9695858d99c5d6dc769c0b4e1db3c50c9e5032a.gz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch greatly reduces the number of outstanding MPI_Isend/MPI_Irecv
communication requests by moving the loop over comm_states (recv,send,wait)
from the outermost to the innermost.
This resolves problems with certain MPI implementations (specifically LAM,
MPICH-NCSA, and Mvapich over Infiniband) which potentially resulted in some
communication buffer overflow and caused the Cactus application to abort or
hang forever.
Preliminary benchmarks with BSSN_MoL show that the patch does not have a
negative impact on myrinet clusters (measured to 64 processors).
It even improves the Carpet performance on GigE clusters (measured up to 16
processors).
The order of the communication loops is controlled by the boolean parameter
CarpetRegrid::minimise_outstanding_communications
which defaults to "no" (preserving the old behaviour).
darcs-hash:20050311160040-3fd61-04d40ac79ef218252f9364a8d18796e9b270d295.gz
|
|
|
|
| |
darcs-hash:20050202125625-891bb-8f5cfc4988f10550002d253c22fb3bb41f978a5f.gz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Turn most of the templates in CarpetLib, which used to have the form
template<int D> class XXX
into classes, i.e., into something like
class XXX
by setting D to the new global integer constant dim, which in turn is set to 3.
The templates gf and data, which used to be of the form
template<typename T, int D> class XXX
are now of the form
template<typename T> class XXX
The templates vect, bbox, and bboxset remain templates.
This change simplifies the code somewhat.
darcs-hash:20050101182234-891bb-c3063528841f0d078b12cc506309ea27d8ce730d.gz
|