MP-Gadget
5.0.1.dev1-76bc7d4726-dirty
|
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <mpi.h>
#include "mpsort.h"
#include "system.h"
#include "mymalloc.h"
#include "openmpsort.h"
#include "endrun.h"
Go to the source code of this file.
Classes | |
struct | crstruct |
struct | piter |
struct | crmpistruct |
struct | TIMER |
struct | TIMERS |
struct | SegmentGroupDescr |
Macros | |
#define | DEFTYPE(type) |
Typedefs | |
typedef int(* | _compar_fn_t) (const void *r1, const void *r2, size_t rsize) |
typedef void(* | _bisect_fn_t) (void *r, const void *r1, const void *r2, size_t rsize) |
Functions | |
static int | _compar_radix (const void *r1, const void *r2, size_t rsize, int dir) |
static int | _compar_radix_u8 (const void *r1, const void *r2, size_t rsize, int dir) |
static int | _compar_radix_le (const void *r1, const void *r2, size_t rsize) |
static int | _compar_radix_be (const void *r1, const void *r2, size_t rsize) |
static int | _compar_radix_le_u8 (const void *r1, const void *r2, size_t rsize) |
static int | _compar_radix_be_u8 (const void *r1, const void *r2, size_t rsize) |
static void | _bisect_radix (void *r, const void *r1, const void *r2, size_t rsize, int dir) |
static void | _bisect_radix_le (void *r, const void *r1, const void *r2, size_t rsize) |
static void | _bisect_radix_be (void *r, const void *r1, const void *r2, size_t rsize) |
void | _setup_radix_sort (struct crstruct *d, void *base, size_t nmemb, size_t size, void(*radix)(const void *ptr, void *radix, void *arg), size_t rsize, void *arg) |
static int | _compute_and_compar_radix (const void *p1, const void *p2) |
static void | radix_sort (void *base, size_t nmemb, size_t size, void(*radix)(const void *ptr, void *radix, void *arg), size_t rsize, void *arg) |
static ptrdiff_t | _bsearch_last_lt (void *P, void *base, size_t nmemb, struct crstruct *d) |
static ptrdiff_t | _bsearch_last_le (void *P, void *base, size_t nmemb, struct crstruct *d) |
static void | _histogram (char *P, int Plength, void *mybase, size_t mynmemb, ptrdiff_t *myCLT, ptrdiff_t *myCLE, struct crstruct *d) |
static void | piter_init (struct piter *pi, char *Pmin, char *Pmax, int Plength, struct crstruct *d) |
static void | piter_destroy (struct piter *pi) |
static void | piter_bisect (struct piter *pi, char *P) |
static int | piter_all_done (struct piter *pi) |
static void | piter_accept (struct piter *pi, char *P, ptrdiff_t *C, ptrdiff_t *CLT, ptrdiff_t *CLE) |
static void | _setup_mpsort_mpi (struct crmpistruct *o, struct crstruct *d, void *myoutbase, size_t myoutnmemb, MPI_Comm comm) |
static void | _destroy_mpsort_mpi (struct crmpistruct *o) |
static void | _find_Pmax_Pmin_C (void *mybase, size_t mynmemb, size_t myoutnmemb, char *Pmax, char *Pmin, ptrdiff_t *C, struct crstruct *d, struct crmpistruct *o) |
static int | _solve_for_layout_mpi (int NTask, ptrdiff_t *C, ptrdiff_t *myT_CLT, ptrdiff_t *myT_CLE, ptrdiff_t *myT_C, MPI_Comm comm) |
static int | _assign_colors (size_t glocalsize, size_t *sizes, int *ncolor, MPI_Comm comm) |
static size_t | _collect_sizes (size_t localsize, size_t *sizes, size_t *myoffset, MPI_Comm comm) |
static int | MPIU_GetLoc (const void *base, MPI_Datatype type, MPI_Op op, MPI_Comm comm) |
static void | _create_segment_group (struct SegmentGroupDescr *descr, size_t *sizes, size_t avgsegsize, int Ngroup, MPI_Comm comm) |
static void | _destroy_segment_group (struct SegmentGroupDescr *descr) |
static void | mpsort_increment_timer (const char *name, int erase) |
void | mpsort_setup_timers (int ntimers) |
void | mpsort_free_timers (void) |
void | mpsort_mpi_report_last_run () |
int | mpsort_mpi_find_ntimers (struct TIMERS *timers) |
void | mpsort_mpi_impl (void *mybase, size_t mynmemb, size_t size, void(*radix)(const void *ptr, void *radix, void *arg), size_t rsize, void *arg, MPI_Comm comm, const int line, const char *file) |
static int | mpsort_mpi_histogram_sort (struct crstruct d, struct crmpistruct o) |
static void | MPIU_Scatter (MPI_Comm comm, int root, const void *sendbuffer, void *recvbuffer, int nrecv, size_t elsize, int *totalnsend) |
static void | MPIU_Gather (MPI_Comm comm, int root, const void *sendbuffer, void *recvbuffer, int nsend, size_t elsize, int *totalnrecv) |
static uint64_t | checksum (void *base, size_t nbytes, MPI_Comm comm) |
void | mpsort_mpi_newarray_impl (void *mybase, size_t mynmemb, void *myoutbase, size_t myoutnmemb, size_t elsize, void(*radix)(const void *ptr, void *radix, void *arg), size_t rsize, void *arg, MPI_Comm comm, const int line, const char *file) |
static void | _mpsort_mpi_parse_env () |
void | mpsort_mpi_set_options (int options) |
int | mpsort_mpi_has_options (int options) |
void | mpsort_mpi_unset_options (int options) |
Variables | |
static struct crstruct | _cacr_d |
static int | _mpsort_mpi_options = 0 |
static MPI_Datatype | MPI_TYPE_PTRDIFF = 0 |
static struct TIMERS | _TIMERS |
#define DEFTYPE | ( | type | ) |
typedef void(* _bisect_fn_t) (void *r, const void *r1, const void *r2, size_t rsize) |
typedef int(* _compar_fn_t) (const void *r1, const void *r2, size_t rsize) |
|
static |
Definition at line 555 of file mpsort.c.
References NTask, and ThisTask.
Referenced by _create_segment_group().
|
static |
Definition at line 94 of file mpsort.c.
Referenced by _bisect_radix_be(), and _bisect_radix_le().
|
static |
Definition at line 125 of file mpsort.c.
References _bisect_radix().
|
static |
Definition at line 122 of file mpsort.c.
References _bisect_radix().
|
static |
Definition at line 257 of file mpsort.c.
References crstruct::arg, crstruct::base, crstruct::compar, crstruct::nmemb, P, crstruct::radix, crstruct::rsize, and crstruct::size.
Referenced by _histogram().
|
static |
Definition at line 216 of file mpsort.c.
References crstruct::arg, crstruct::base, crstruct::compar, crstruct::nmemb, P, crstruct::radix, crstruct::rsize, and crstruct::size.
Referenced by _histogram().
|
static |
Definition at line 593 of file mpsort.c.
References MPI_TYPE_PTRDIFF, NTask, and ThisTask.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 48 of file mpsort.c.
Referenced by _compar_radix_be(), and _compar_radix_le().
|
static |
Definition at line 85 of file mpsort.c.
References _compar_radix().
|
static |
Definition at line 91 of file mpsort.c.
References _compar_radix_u8().
|
static |
Definition at line 82 of file mpsort.c.
References _compar_radix().
|
static |
Definition at line 88 of file mpsort.c.
References _compar_radix_u8().
|
static |
Definition at line 65 of file mpsort.c.
Referenced by _compar_radix_be_u8(), and _compar_radix_le_u8().
|
static |
Definition at line 189 of file mpsort.c.
References _cacr_d, crstruct::arg, crstruct::compar, crstruct::radix, and crstruct::rsize.
Referenced by radix_sort().
|
static |
Definition at line 670 of file mpsort.c.
References _assign_colors(), SegmentGroupDescr::Group, SegmentGroupDescr::group_leader_rank, SegmentGroupDescr::GroupID, SegmentGroupDescr::is_group_leader, SegmentGroupDescr::Leaders, MPIU_GetLoc(), SegmentGroupDescr::Ngroup, SegmentGroupDescr::Nsegments, NTask, SegmentGroupDescr::Segment, SegmentGroupDescr::segment_end, SegmentGroupDescr::segment_leader_rank, SegmentGroupDescr::segment_start, SegmentGroupDescr::ThisSegment, and ThisTask.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 523 of file mpsort.c.
References crmpistruct::MPI_TYPE_DATA, and crmpistruct::MPI_TYPE_RADIX.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 715 of file mpsort.c.
References SegmentGroupDescr::Group, SegmentGroupDescr::Leaders, and SegmentGroupDescr::Segment.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 1304 of file mpsort.c.
References crstruct::arg, crmpistruct::comm, crstruct::compar, piter::d, MPI_TYPE_PTRDIFF, crmpistruct::MPI_TYPE_RADIX, myfree, mymalloc, crmpistruct::NTask, crstruct::radix, crstruct::rsize, crstruct::size, and ta_malloc.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 305 of file mpsort.c.
References _bsearch_last_le(), _bsearch_last_lt(), P, crstruct::rsize, and crstruct::size.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 1424 of file mpsort.c.
References MPSORT_DISABLE_GATHER_SORT, mpsort_mpi_set_options(), and MPSORT_REQUIRE_GATHER_SORT.
Referenced by mpsort_mpi_has_options(), mpsort_mpi_set_options(), and mpsort_mpi_unset_options().
|
static |
Definition at line 493 of file mpsort.c.
References crstruct::base, crmpistruct::comm, endrun(), crmpistruct::MPI_TYPE_DATA, MPI_TYPE_PTRDIFF, crmpistruct::MPI_TYPE_RADIX, crmpistruct::mybase, crmpistruct::mynmemb, crmpistruct::myoutbase, crmpistruct::myoutnmemb, crstruct::nmemb, crmpistruct::nmemb, crmpistruct::NTask, crmpistruct::outnmemb, crstruct::rsize, crstruct::size, and crmpistruct::ThisTask.
Referenced by mpsort_mpi_newarray_impl().
void _setup_radix_sort | ( | struct crstruct * | d, |
void * | base, | ||
size_t | nmemb, | ||
size_t | size, | ||
void(*)(const void *ptr, void *radix, void *arg) | radix, | ||
size_t | rsize, | ||
void * | arg | ||
) |
Definition at line 129 of file mpsort.c.
Referenced by mpsort_mpi_newarray_impl(), and radix_sort().
|
static |
Definition at line 1360 of file mpsort.c.
References endrun(), NTask, and ThisTask.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 796 of file mpsort.c.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 947 of file mpsort.c.
References crmpistruct::comm, NTask, ta_free, ta_malloc, and ThisTask.
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 641 of file mpsort.c.
References NTask, and ThisTask.
Referenced by _create_segment_group().
|
static |
Definition at line 985 of file mpsort.c.
References crmpistruct::comm, NTask, ta_free, ta_malloc, and ThisTask.
Referenced by mpsort_mpi_newarray_impl().
void mpsort_free_timers | ( | void | ) |
Definition at line 745 of file mpsort.c.
References _TIMERS, TIMERS::curtmr, myfree, TIMERS::ntimer, and TIMERS::tmr.
|
static |
Definition at line 723 of file mpsort.c.
References _TIMERS, TIMERS::curtmr, name, TIMER::name, TIMER::time, and TIMERS::tmr.
Referenced by mpsort_mpi_histogram_sort().
int mpsort_mpi_find_ntimers | ( | struct TIMERS * | timers | ) |
int mpsort_mpi_has_options | ( | int | options | ) |
Definition at line 1444 of file mpsort.c.
References _mpsort_mpi_options, and _mpsort_mpi_parse_env().
Referenced by mpsort_mpi_newarray_impl().
|
static |
Definition at line 1022 of file mpsort.c.
References _find_Pmax_Pmin_C(), _histogram(), _solve_for_layout_mpi(), crstruct::arg, crstruct::base, crmpistruct::comm, piter::d, endrun(), MPI_Alltoallv_smart(), crmpistruct::MPI_TYPE_DATA, MPI_TYPE_PTRDIFF, mpsort_increment_timer(), crmpistruct::mybase, myfree, mymalloc, crmpistruct::mynmemb, crmpistruct::myoutbase, crmpistruct::myoutnmemb, crstruct::nmemb, crmpistruct::NTask, P, piter_accept(), piter_all_done(), piter_bisect(), piter_destroy(), piter_init(), crstruct::radix, radix_sort(), crstruct::rsize, crstruct::size, ta_free, ta_malloc, and crmpistruct::ThisTask.
Referenced by mpsort_mpi_newarray_impl().
void mpsort_mpi_impl | ( | void * | mybase, |
size_t | mynmemb, | ||
size_t | size, | ||
void(*)(const void *ptr, void *radix, void *arg) | radix, | ||
size_t | rsize, | ||
void * | arg, | ||
MPI_Comm | comm, | ||
const int | line, | ||
const char * | file | ||
) |
Definition at line 775 of file mpsort.c.
References mpsort_mpi_newarray_impl().
void mpsort_mpi_newarray_impl | ( | void * | mybase, |
size_t | mynmemb, | ||
void * | myoutbase, | ||
size_t | myoutnmemb, | ||
size_t | elsize, | ||
void(*)(const void *ptr, void *radix, void *arg) | radix, | ||
size_t | rsize, | ||
void * | arg, | ||
MPI_Comm | comm, | ||
const int | line, | ||
const char * | file | ||
) |
Definition at line 809 of file mpsort.c.
References _collect_sizes(), _create_segment_group(), _destroy_mpsort_mpi(), _destroy_segment_group(), _setup_mpsort_mpi(), _setup_radix_sort(), checksum(), crmpistruct::comm, endrun(), SegmentGroupDescr::Group, SegmentGroupDescr::group_leader_rank, SegmentGroupDescr::is_group_leader, SegmentGroupDescr::Leaders, message(), MPI_TYPE_PTRDIFF, MPIU_Gather(), MPIU_Scatter(), MPSORT_DISABLE_GATHER_SORT, mpsort_mpi_has_options(), mpsort_mpi_histogram_sort(), MPSORT_REQUIRE_GATHER_SORT, crmpistruct::mybase, myfree, mymalloc, crmpistruct::myoutbase, crmpistruct::myoutnmemb, NTask, ta_malloc, ThisTask, and SegmentGroupDescr::totalsize.
Referenced by mpsort_mpi_impl().
void mpsort_mpi_report_last_run | ( | ) |
Definition at line 756 of file mpsort.c.
References _TIMERS, TIMERS::curtmr, message(), TIMER::name, TIMER::time, and TIMERS::tmr.
void mpsort_mpi_set_options | ( | int | options | ) |
Definition at line 1437 of file mpsort.c.
References _mpsort_mpi_options, and _mpsort_mpi_parse_env().
Referenced by _mpsort_mpi_parse_env(), and do_mpsort_test().
void mpsort_mpi_unset_options | ( | int | options | ) |
Definition at line 1451 of file mpsort.c.
References _mpsort_mpi_options, and _mpsort_mpi_parse_env().
Referenced by do_mpsort_test().
void mpsort_setup_timers | ( | int | ntimers | ) |
Definition at line 736 of file mpsort.c.
References _TIMERS, TIMERS::curtmr, mymalloc2, TIMERS::ntimer, and TIMERS::tmr.
Referenced by do_mpsort_test().
|
static |
Definition at line 434 of file mpsort.c.
References piter::d, P, piter::Pleft, piter::Plength, piter::Pright, crstruct::rsize, and piter::stable.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 409 of file mpsort.c.
References piter::narrow, piter::Plength, and piter::stable.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 378 of file mpsort.c.
References crstruct::bisect, crstruct::compar, piter::d, piter::narrow, P, piter::Pleft, piter::Plength, piter::Pright, crstruct::rsize, and piter::stable.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 364 of file mpsort.c.
References myfree, piter::narrow, piter::Pleft, piter::Pright, and piter::stable.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 344 of file mpsort.c.
References piter::d, piter::narrow, piter::Pleft, piter::Plength, piter::Pright, crstruct::rsize, piter::stable, and ta_malloc.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 197 of file mpsort.c.
References _cacr_d, _compute_and_compar_radix(), _setup_radix_sort(), crstruct::arg, crstruct::base, crstruct::nmemb, qsort_openmp, crstruct::radix, crstruct::rsize, and crstruct::size.
Referenced by mpsort_mpi_histogram_sort().
|
static |
Definition at line 129 of file mpsort.c.
Referenced by _compute_and_compar_radix(), and radix_sort().
|
static |
Definition at line 460 of file mpsort.c.
Referenced by mpsort_mpi_has_options(), mpsort_mpi_set_options(), and mpsort_mpi_unset_options().
|
static |
|
static |
Definition at line 476 of file mpsort.c.
Referenced by _collect_sizes(), _find_Pmax_Pmin_C(), _setup_mpsort_mpi(), mpsort_mpi_histogram_sort(), and mpsort_mpi_newarray_impl().