Class TempLat::ParafaftPlanner
template <size_t NDim>
ClassList > TempLat > ParafaftPlanner
Plan creation for parafaft FFT transforms. More...
#include <parafaftplanner.h>
Inherits the following classes: TempLat::FFTLibraryInterface
Inherited by the following classes: TempLat::ParafaftMemoryLayout
Public Functions
| Type | Name |
|---|---|
| ParafaftPlanner () |
|
| virtual std::shared_ptr< FFTPlanInterface< double, NDim > > | getPlans_double (const MPICartesianGroup & group, const FFTLayoutStruct< NDim > & layout) override Create double-precision plans. |
| virtual std::shared_ptr< FFTPlanInterface< float, NDim > > | getPlans_float (const MPICartesianGroup & group, const FFTLayoutStruct< NDim > & layout) override Create float-precision plans. |
| virtual void | setPlannerPatience (int level) override Set planner patience level. |
Public Functions inherited from TempLat::FFTLibraryInterface
See TempLat::FFTLibraryInterface
| Type | Name |
|---|---|
| FFTLibraryInterface () = default |
|
| virtual FFTLayoutStruct< NDim > | computeLocalSizes (MPICartesianGroup group, device::IdxArray< NDim > nGridPoints, bool forbidTransposition=false) = 0 given an actual setup, return the description of the subarray of the global problem that this process holds. |
| virtual IntrinsicScales | getIntrinsicRescaleToGetUnnormalizedFFT (device::Idx nGridPoints) = 0 The lattice objects expect an unnormalized FFT, such as the one FFTW gives: applying once forward and then backward should return the input values multiplied by nGridPoints^nDimensions, i.e. the total number of values in the problem. If your library does not respect that, return the factor by which we must multiply the output values to obtain the unnormalized FFT. Return defaultIntrinsicScales (exact (double) 1) in order not to waste time, if your library does it like FFTW. |
| virtual device::Idx | getMaximumNumberOfDimensionsToDivide (device::Idx nDimensions) = 0 Return the number of dimensions over which the MPI processes can be distributed, given a problem of dimension nDimensions. FFTW can only divide in 1 dimension: the leading dimension. ParaFaFT can divide an N dimensional setup over the leading N - 1 dimensions. |
| virtual std::shared_ptr< FFTPlanInterface< double, NDim > > | getPlans_double (const MPICartesianGroup & group, const FFTLayoutStruct< NDim > & layout) = 0 Create fully working plans, which must self-destruct in the FFTPlanInterface 's destructor. Use shared_ptr's. |
| virtual std::shared_ptr< FFTPlanInterface< float, NDim > > | getPlans_float (const MPICartesianGroup & group, const FFTLayoutStruct< NDim > & layout) = 0 Create fully working plans, which must self-destruct in the FFTPlanInterface 's destructor. Use shared_ptr's. Since we use virtual methods here, we cannot use templates. Only one type of dynamic typing allowed by C++, either runtime (virtual) or compile time (template). |
| virtual void | setPlannerPatience (int level) = 0 If your library has different levels of patience for the planning phase, set it here. |
| virtual | ~FFTLibraryInterface () = default |
Detailed Description
Creates parafaft::ParaFaFT_R2C objects wrapped in ParafaftPlanHolder. Supports both double and (when HAVE_FFTFLOAT is defined) single precision.
Unit test: ctest -R test-parafaftplanner
Public Functions Documentation
function ParafaftPlanner
function getPlans_double
Create double-precision plans.
inline virtual std::shared_ptr< FFTPlanInterface < double, NDim > > TempLat::ParafaftPlanner::getPlans_double (
const MPICartesianGroup & group,
const FFTLayoutStruct < NDim > & layout
) override
Creates a parafaft::ParaFaFT_R2C<NDim, ParaFaFT_Backend<double>> object and wraps it in ParafaftPlanHolder. Parafaft's in-place API accepts padded buffers matching CosmoLattice's layout.
Implements TempLat::FFTLibraryInterface::getPlans_double
function getPlans_float
Create float-precision plans.
inline virtual std::shared_ptr< FFTPlanInterface < float, NDim > > TempLat::ParafaftPlanner::getPlans_float (
const MPICartesianGroup & group,
const FFTLayoutStruct < NDim > & layout
) override
Enabled when HAVE_FFTFLOAT is defined (CMake FLOAT=ON). Requires libfftw3f on CPU/FFTW builds (parafaft's PARAFAFT_FFTW3F_AVAILABLE); TempLat's CMake already enforces this at configure time when FLOAT=ON.
Implements TempLat::FFTLibraryInterface::getPlans_float
function setPlannerPatience
Set planner patience level.
Parafaft uses FFTW internally with FFTW_ESTIMATE, so this is a no-op. The parameter is accepted for interface compatibility.
Implements TempLat::FFTLibraryInterface::setPlannerPatience
The documentation for this class was generated from the following file cosmolatticeweb/tmp/code_source/templat/include/TempLat/fft/external/parafaft/parafaftplanner.h