[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