[ET Trac] [Einstein Toolkit] #1975: Cactus: mark routines used by DECLARE_CCTK_ARGUMENTS as pure
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Fri Nov 4 08:09:13 CDT 2016
#1975: Cactus: mark routines used by DECLARE_CCTK_ARGUMENTS as pure
-------------------------+--------------------------------------------------
Reporter: rhaas | Owner:
Type: enhancement | Status: new
Priority: minor | Milestone:
Component: Cactus | Version: development version
Keywords: |
-------------------------+--------------------------------------------------
Currently CCTK_DECLARE_ARGUMENTS contains code like this:
{{{
static int varindex = -100;
if (varindex == -100) varindex = CCTK_VarIndex("thorn::var");
var = CCTKi_VarDataPtr(cctGH, 0, varindex);
}}}
ie it calls the two functions VarIndex and VarDataPtr for all variables
that the thorn defines or inherits. This happens no matter whether the
variable "var" is later used in the routine or not since the two functions
could have side effects. The patch in the pull requests declares the
functions "pure", ie side effect free (https://gcc.gnu.org/onlinedocs/gcc
/Common-Function-Attributes.html#index-functions-that-have-no-side-
effects-3320) which lets the compiler remove the call to the functions if
their result is not used.
Technically CCTK_VarIndex does have a side effect: it can call CCTK_VWarn
(at level 6) for unknown variable names though the result does not affect
the computation. CCTKi_VarDataPtr is explicitly designed to be side-effect
free.
The patch would lead to slightly smaller code and possible slightly faster
code as well when CCTK_DECLARE_ARGUMENTS is used often or with many
inherited variables.
The pull request is at https://bitbucket.org/cactuscode/cactus/pull-
requests/34/cactus-mark-routines-used-by/diff
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1975>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list