Mixed Precision in HyTeG
This MR is the final version of my Masters's thesis, do to rebasing of HyTeGs codebase and the introduction of the hyteg_operators submodule and the HOG tool, merging my work was not as trivial.
The changes of this MR are divided into several parts:
- The application of my master thesis, i.e. a Poisson problem using IR as a solver, GMG as inner-solver, 1st order Chebychev as smoother and CG as coarse grid solver. This part is quite lengthy and includes a lot of scripts and apps for benchmarking and profiling. If requested, the entire folder
2023-zikeli-mt/MT-apps/can be taken out from this MR and included in another MR. This part also includes an IR solver, that is meant to be a standalone solver and will be added tosrc/hytec/solvers/in a future issue (TODO). - Some changes for the
memorystructure andP1 functionalitiesto allow forfloat16. (src/hyteg/gridtransformators/andsrc/hyteg/memory/) - Some casting statements for the solvers to allow for solvers using mixed precision. (
src/hyteg/solvers/) - Some minor changes that could have been standalone MR but are too insignificant to do so, therefore, they are just added within this MR.
- Printing the elements within a LaTeX
Tablein the scientific format. (src/hyteg/dataexport/LaTeX/Table.hpp) - Including a getter function for only the inner global DoFs. (
src/hyteg/p<{1,2}>functionspace/<{VertexDoFFuntions,P2Function}>.hpp) - Adding a label for the
ChebyshevSmootherto theTimingTree. (src/hyteg/solvers/ChebyshevSmoother.hpp)
- Lastly, some changes related to #229 (closed), !669 (merged)
Note:
Since at the time this work was done, the submodule hyteg_operators was not a thing yet, I needed to generate some operators and add them to the repository in the folder apps/2023-zikeli-mt/MT-apps/operators-used. At some point, they can be replaced by the submodule, but as of right now, there is no nice way to model various precisions with HOG and use them hyteg_operators. This will be part of a separate issue (TODO). Once this issue is fixed, they can be removed from the repository again.
Edited by Michael Zikeli