[ET Trac] [Einstein Toolkit] #387: Fortran interface to LoopControl broken in stable Carpet
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Tue Apr 5 20:30:22 CDT 2011
#387: Fortran interface to LoopControl broken in stable Carpet
---------------------+------------------------------------------------------
Reporter: rhaas | Owner: rhaas
Type: defect | Status: review
Priority: major | Milestone: ET_2011_05
Component: Carpet | Version:
Resolution: | Keywords:
---------------------+------------------------------------------------------
Comment (by eschnett):
This expression rounds down to the next multiple of lc_di, assuming that
lc_di is a power of 2. This is necessary for vectorisation; for example, a
2-vector of an 8-byte quantity can only be efficiently loaded and stored
if it is located at an address that is a multiple of 16.
If lc_di is a power of 2, then -lc_di is a mask that sets some of the
lowest bits to zero, and lc_ipos & -lc_di is the rounded-down multiple of
lc_di. The difference to lc_ipos is then the offset to this location.
The expression lc_ipos & -lc_di is in this case equivalent to
lc_ipos/lc_di*lc_di, but is evaluated much faster.
This is standard C and C++. The inline variable declarations may require
choosing C99 semantics.
Without vectorisation, lc_di is 1, and lc_ioffset is always 0.
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/387#comment:4>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list