Go to the documentation of this file.
33 #include <underling/visibility.h>
135 FILE *output_file) UNDERLING_API;
200 int underling_init(
int *argc,
char **argv[],
int nthreads) UNDERLING_API;
290 int pB) UNDERLING_API;
339 FILE *output_file) UNDERLING_API;
377 unsigned transposed_flags) UNDERLING_API;
398 FILE *output_file) UNDERLING_API;
418 int i) UNDERLING_API;
454 int *order) UNDERLING_API;
554 #define UNDERLING_TRANSPOSE_LONG_N2_TO_LONG_N1 (1U << 0)
562 #define UNDERLING_TRANSPOSE_LONG_N1_TO_LONG_N0 (1U << 1)
570 #define UNDERLING_TRANSPOSE_LONG_N0_TO_LONG_N1 (1U << 2)
578 #define UNDERLING_TRANSPOSE_LONG_N1_TO_LONG_N2 (1U << 3)
593 #define UNDERLING_TRANSPOSE_NONE (1U << 4)
596 #define UNDERLING_TRANSPOSE_ALL \
597 ( UNDERLING_TRANSPOSE_LONG_N2_TO_LONG_N1 \
598 | UNDERLING_TRANSPOSE_LONG_N1_TO_LONG_N0 \
599 | UNDERLING_TRANSPOSE_LONG_N0_TO_LONG_N1 \
600 | UNDERLING_TRANSPOSE_LONG_N1_TO_LONG_N2 )
680 unsigned transpose_flags,
681 unsigned fftw_rigor_flags) UNDERLING_API;
702 FILE *output_file) UNDERLING_API;
775 #define UNDERLING_TRANSPOSED_LONG_N2 (1U << 4)
789 #define UNDERLING_TRANSPOSED_LONG_N0 (1U << 5)
793 #ifndef DOXYGEN_SHOULD_SKIP_THIS
796 underling_debug_transpose(
797 MPI_Comm comm) UNDERLING_API;
804 #endif // UNDERLING_H
size_t extent
The total extent of all local information, excluding communication buffers, in units of underling_rea...
Definition: underling.h:119
void underling_only_cleanup()
Release all resources held by underling.
size_t underling_local_memory(const underling_problem problem)
Find the amount of local storage necessary to plan and execute a problem.
int size[4]
The amount of global data stored locally in directions n{0,1,2}.
Definition: underling.h:93
size_t underling_local(const underling_problem problem, int i, int *start, int *size, int *stride, int *order)
Obtain the processor-local sizes, storage details, and global starting offsets when the data is long ...
size_t underling_local_memory_optimum(const underling_problem problem)
Find the amount of local storage necessary to merely hold a problem in memory.
underling_grid underling_grid_create(MPI_Comm comm, int n0, int n1, int n2, int pA, int pB)
Collectively create a reusable domain-to-processor mapping across the given MPI communicator.
struct underling_plan_s * underling_plan
A type encapsulating the FFTW MPI invocations necessary to transition from being long in one directio...
Definition: underling.h:614
void underling_grid_destroy(underling_grid grid)
Destroy all resources associated with the given grid.
void underling_fprint_grid(const underling_grid grid, FILE *output_file)
Dump an instance's internals in a debugging-friendly format.
void underling_cleanup()
Release all resources held by FFTW MPI, FFTW threading, and underling.
int underling_grid_pA_size(const underling_grid grid)
Obtain the size of the processor grid in the pA direction.
struct underling_grid_s * underling_grid
A type encapsulating a reusable domain-to-processor mapping.
Definition: underling.h:238
void underling_fprint_extents(const underling_extents *extents, FILE *output_file)
Dump an instance's internals in a debugging-friendly format.
void underling_fprint_plan(const underling_plan plan, FILE *output_file)
Dump an instance's internals in a debugging-friendly format.
int stride[4]
The stride between adjacent elements in directions n{0,1,2}.
Definition: underling.h:99
int underling_execute_long_n2_to_long_n1(const underling_plan plan, underling_real *in, underling_real *out)
Collectively transform data from being long in n2 within buffer in to being long in n1 within buffer ...
int underling_grid_pB_size(const underling_grid grid)
Obtain the size of the processor grid in the pB direction.
size_t underling_local_memory_maximum(const underling_grid grid, const underling_problem problem)
Collectively find the maximum amount of per-processor memory required to handle the problem across al...
void underling_problem_destroy(underling_problem problem)
Destroy all resources associated with the given problem.
int start[4]
The inclusive global data starting offset in directions n{0,1,2}.
Definition: underling.h:85
void underling_fprint_problem(const underling_problem problem, FILE *output_file)
Dump an instance's internals in a debugging-friendly format.
underling_extents underling_local_extents(const underling_problem problem, int i)
Obtain the processor-local sizes, storage details, and global starting offsets when the data is long ...
const underling_extents UNDERLING_EXTENTS_INVALID
A static instance used to communicate wholly invalid, unusable extents.
size_t underling_local_memory_minimum(const underling_grid grid, const underling_problem problem)
Collectively find the minimal amount of per-processor memory required to handle the problem across al...
size_t underling_global_memory_optimum(const underling_grid grid, const underling_problem problem)
Find the theoretical optimum (minimum) amount of memory required to store the given problem on all pr...
int order[4]
The storage order from the fastest index to the slowest.
Definition: underling.h:108
double underling_real
The real-valued scalar type used throughout the library.
Definition: underling.h:63
A transparent type storing the local sizes, strides, and storage when the data is long in a particula...
Definition: underling.h:79
int underling_execute_long_n0_to_long_n1(const underling_plan plan, underling_real *in, underling_real *out)
Collectively transform data from being long in n0 within buffer in to being long in n1 within buffer ...
int underling_execute_long_n1_to_long_n0(const underling_plan plan, underling_real *in, underling_real *out)
Collectively transform data from being long in n1 within buffer in to being long in n0 within buffer ...
void underling_plan_destroy(underling_plan plan)
Destroy all resources associated with the given plan.
int underling_extents_cmp(const underling_extents *const e1, const underling_extents *const e2)
Compare two underling_extents instances using lexicographic ordering.
struct underling_problem_s * underling_problem
A type encapsulating all parallel decomposition information, including required local storage and str...
Definition: underling.h:352
int underling_execute_long_n1_to_long_n2(const underling_plan plan, underling_real *in, underling_real *out)
Collectively transform data from being long in n1 within buffer in to being long in n2 within buffer ...
int underling_only_init(int *argc, char **argv[])
Initialize underling.
size_t underling_global_memory(const underling_grid grid, const underling_problem problem)
Collectively find the global amount of memory required to handle the problem across all processors in...
underling_extents extents
Definition: underling.hpp:44
underling_problem underling_problem_create(underling_grid grid, int howmany, unsigned transposed_flags)
Collectively create an instance encapsulating the parallel decomposition details for a decomposition ...
underling_plan underling_plan_create(const underling_problem problem, underling_real *in, underling_real *out, unsigned transpose_flags, unsigned fftw_rigor_flags)
Collectively create an execution plan to solve the given decomposition problem using the given input ...
int underling_init(int *argc, char **argv[], int nthreads)
Initialize MPI (if necessary), FFTW threading, FFTW MPI, and underling.
Generated on Wed Jul 1 2026 13:22:57 for underling
by
doxygen
1.8.17