WIP: Explicit template instantiation of YaspGrid
Summary
Explicit template instantiation of YaspGrid
for some common template parameters.
Details
Using explicit template instantiation could reduce the overall compile time of targets significantly. YaspGrid
is one of the heavy templates used in several tests and in a lot of real applications. Some initial benchmarks of the compile time for the dune-grid tests showed an improvement of 25% to up to 80%. If this instantiation technique is extended to other grid types it does not only show code errors in the templates, the overall compile time can be reduced further.
Discussion
The YaspGrid
class has some problem with explicit template instantiation. This is because of the static_assert
ions in the constructor of the class. A workaround could be to conditionally compile the constructors only and throw an exception instead of a static assertion. An alternative would be to deactivate constructor that do not belong to the class template parameters (i.e. the coordinate types)
Changes
- Separate declaration from definition of many
YaspGrid
member functions. Therefore, I have introduced the implementation fileyaspgrid/yaspgrid.impl.hh
- Remove
static_assert
from constructors ofYaspGrid
and replace withDUNE_THROW
(*). - Add Explicit template instantiation of
YaspGrid<1, C>
,YaspGrid<2, C>
,YaspGrid<3, C>
, forctype=double
andC
the various coordinate times - Add explicit template instantiation of
BackupRestore<YaspGrid<[...]>>
(*) This change is subject of discussion, see above.