OpenMPI
0.1.1
|
Infrastructure for MPI group support. More...
#include "ompi_config.h"
#include "ompi/proc/proc.h"
#include "mpi.h"
#include "opal/class/opal_pointer_array.h"
#include "opal/util/output.h"
#include "group_dbg.h"
Go to the source code of this file.
Data Structures | |
struct | ompi_group_sporadic_list_t |
struct | ompi_group_sporadic_data_t |
struct | ompi_group_strided_data_t |
struct | ompi_group_bitmap_data_t |
struct | ompi_group_t |
Group structure Currently we have four formats for storing the process pointers that are members of the group. More... | |
struct | ompi_predefined_group_t |
Macros | |
#define | BSIZE ((int)sizeof(unsigned char)*8) |
#define | PREDEFINED_GROUP_PAD (sizeof(void*) * 32) |
Padded struct to maintain back compatibiltiy. More... | |
#define | OMPI_GROUP_IS_INTRINSIC(_group) ((_group)->grp_flags&OMPI_GROUP_INTRINSIC) |
#define | OMPI_GROUP_IS_DENSE(_group) ((_group)->grp_flags & OMPI_GROUP_DENSE) |
#define | OMPI_GROUP_IS_SPORADIC(_group) ((_group)->grp_flags & OMPI_GROUP_SPORADIC) |
#define | OMPI_GROUP_IS_STRIDED(_group) ((_group)->grp_flags & OMPI_GROUP_STRIDED) |
#define | OMPI_GROUP_IS_BITMAP(_group) ((_group)->grp_flags & OMPI_GROUP_BITMAP) |
#define | OMPI_GROUP_SET_INTRINSIC(_group) ( (_group)->grp_flags |= OMPI_GROUP_INTRINSIC) |
#define | OMPI_GROUP_SET_DENSE(_group) ( (_group)->grp_flags |= OMPI_GROUP_DENSE) |
#define | OMPI_GROUP_SET_SPORADIC(_group) ( (_group)->grp_flags |= OMPI_GROUP_SPORADIC) |
#define | OMPI_GROUP_SET_STRIDED(_group) ( (_group)->grp_flags |= OMPI_GROUP_STRIDED) |
#define | OMPI_GROUP_SET_BITMAP(_group) ( (_group)->grp_flags |= OMPI_GROUP_BITMAP) |
Typedefs | |
typedef struct ompi_group_t | ompi_group_t |
typedef struct ompi_predefined_group_t | ompi_predefined_group_t |
Functions | |
OMPI_DECLSPEC | OBJ_CLASS_DECLARATION (ompi_group_t) |
OMPI_DECLSPEC ompi_group_t * | ompi_group_allocate (int group_size) |
Allocate a new group structure. More... | |
ompi_group_t * | ompi_group_allocate_sporadic (int group_size) |
ompi_group_t * | ompi_group_allocate_strided (void) |
ompi_group_t * | ompi_group_allocate_bmap (int orig_group_size, int group_size) |
OMPI_DECLSPEC void | ompi_group_increment_proc_count (ompi_group_t *group) |
Increment the reference count of the proc structures. More... | |
OMPI_DECLSPEC void | ompi_group_decrement_proc_count (ompi_group_t *group) |
Decrement the reference count of the proc structures. More... | |
int | ompi_group_init (void) |
Initialize OMPI group infrastructure. More... | |
int | ompi_group_finalize (void) |
Clean up OMPI group infrastructure. More... | |
static int | ompi_group_size (ompi_group_t *group) |
Get group size. More... | |
static int | ompi_group_rank (ompi_group_t *group) |
Get group rank. More... | |
void | ompi_set_group_rank (ompi_group_t *group, struct ompi_proc_t *proc_pointer) |
Set group rank in the input group structure. More... | |
OMPI_DECLSPEC int | ompi_group_translate_ranks (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
Abstracting MPI_Group_translate_ranks to an ompi function for internal use. | |
OMPI_DECLSPEC int | ompi_group_compare (ompi_group_t *group1, ompi_group_t *group2, int *result) |
Abstracting MPI_Group_compare to an ompi function for internal use. | |
int | ompi_group_free (ompi_group_t **group) |
Abstracting MPI_Group_free, since it is required by some internal functions... | |
OMPI_DECLSPEC ompi_proc_t * | ompi_group_get_proc_ptr (ompi_group_t *group, int rank) |
Functions to handle process pointers for sparse group formats. | |
int | ompi_group_translate_ranks_sporadic (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
int | ompi_group_translate_ranks_sporadic_reverse (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
int | ompi_group_translate_ranks_strided (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
int | ompi_group_translate_ranks_strided_reverse (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
int | ompi_group_translate_ranks_bmap (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
int | ompi_group_translate_ranks_bmap_reverse (ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2) |
OMPI_DECLSPEC int | ompi_group_incl (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
Prototypes for the group back-end functions. More... | |
int | ompi_group_excl (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
int | ompi_group_range_incl (ompi_group_t *group, int n_triplets, int ranges[][3], ompi_group_t **new_group) |
int | ompi_group_range_excl (ompi_group_t *group, int n_triplets, int ranges[][3], ompi_group_t **new_group) |
int | ompi_group_union (ompi_group_t *group1, ompi_group_t *group2, ompi_group_t **new_group) |
int | ompi_group_intersection (ompi_group_t *group1, ompi_group_t *group2, ompi_group_t **new_group) |
int | ompi_group_difference (ompi_group_t *group1, ompi_group_t *group2, ompi_group_t **new_group) |
int | ompi_group_incl_plist (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
Include Functions to handle Sparse storage formats. | |
int | ompi_group_incl_spor (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
int | ompi_group_incl_strided (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
int | ompi_group_incl_bmap (ompi_group_t *group, int n, int *ranks, ompi_group_t **new_group) |
int | ompi_group_calc_plist (int n, int *ranks) |
Functions to calculate storage spaces. | |
int | ompi_group_calc_strided (int n, int *ranks) |
int | ompi_group_calc_sporadic (int n, int *ranks) |
int | ompi_group_calc_bmap (int n, int orig_size, int *ranks) |
int | ompi_group_minloc (int list[], int length) |
Function to return the minimum value in an array. | |
static struct ompi_proc_t * | ompi_group_peer_lookup (ompi_group_t *group, int peer_id) |
Inline function to check if sparse groups are enabled and return the direct access to the proc pointer, otherwise the lookup function. | |
OMPI_DECLSPEC int | ompi_group_peer_lookup_id (ompi_group_t *group, ompi_proc_t *proc) |
Determine the rank of the specified process in this group. | |
int | ompi_group_dump (ompi_group_t *group) |
Function to print the group info. | |
int | ompi_group_div_ceil (int num, int den) |
Ceil Function so not to include the math.h lib. | |
Variables | |
OMPI_DECLSPEC struct opal_pointer_array_t | ompi_group_f_to_c_table |
Table for Fortran <-> C group handle conversion. | |
OMPI_DECLSPEC struct ompi_predefined_group_t | ompi_mpi_group_null |
Infrastructure for MPI group support.
#define PREDEFINED_GROUP_PAD (sizeof(void*) * 32) |
Padded struct to maintain back compatibiltiy.
See ompi/communicator/communicator.h comments with struct ompi_communicator_t for full explanation why we chose the following padding construct for predefines.
OMPI_DECLSPEC ompi_group_t* ompi_group_allocate | ( | int | group_size | ) |
Allocate a new group structure.
group_size | Number of MPI processes in the group |
References ompi_group_t::grp_f_to_c_index, ompi_group_t::grp_my_rank, ompi_group_t::grp_proc_count, ompi_group_t::grp_proc_pointers, and OBJ_RELEASE.
Referenced by ompi_group_incl_plist().
OMPI_DECLSPEC void ompi_group_decrement_proc_count | ( | ompi_group_t * | group | ) |
Decrement the reference count of the proc structures.
group | Pointer to ompi_group_t structute (IN) |
References ompi_group_t::grp_proc_count, OBJ_RELEASE, and ompi_group_peer_lookup().
Referenced by ompi_group_free().
int ompi_group_finalize | ( | void | ) |
Clean up OMPI group infrastructure.
References ompi_group_t::grp_flags, OBJ_DESTRUCT, and OBJ_RELEASE.
Referenced by ompi_mpi_finalize().
OMPI_DECLSPEC int ompi_group_incl | ( | ompi_group_t * | group, |
int | n, | ||
int * | ranks, | ||
ompi_group_t ** | new_group | ||
) |
Prototypes for the group back-end functions.
Argument lists are similar to the according C MPI functions.
References ompi_group_t::grp_proc_count, ompi_group_calc_plist(), ompi_group_incl_plist(), and ompi_group_minloc().
OMPI_DECLSPEC void ompi_group_increment_proc_count | ( | ompi_group_t * | group | ) |
Increment the reference count of the proc structures.
group | Pointer to ompi_group_t structute (IN) |
References ompi_group_t::grp_proc_count, OBJ_RETAIN, and ompi_group_peer_lookup().
Referenced by ompi_group_incl_plist().
int ompi_group_init | ( | void | ) |
Initialize OMPI group infrastructure.
References ompi_group_t::grp_flags, ompi_group_t::grp_my_rank, ompi_group_t::grp_proc_count, ompi_group_t::grp_proc_pointers, OBJ_CONSTRUCT, and opal_pointer_array_init().
Referenced by ompi_mpi_init().
|
inlinestatic |
Get group rank.
group | Pointer to ompi_group_t structure (IN) |
References ompi_group_t::grp_my_rank.
|
inlinestatic |
Get group size.
group | Pointer to ompi_group_t structute (IN) |
References ompi_group_t::grp_proc_count.
void ompi_set_group_rank | ( | ompi_group_t * | group, |
struct ompi_proc_t * | proc_pointer | ||
) |
Set group rank in the input group structure.
group | Group Pointer to ompi_group_t structure (INOUT) |
proc_pointer | Pointer to ompi_proc_t structure for process. MPI_PROC_NULL may be used to indicate proc not in group |
References ompi_group_t::grp_my_rank, ompi_group_t::grp_proc_count, and ompi_group_peer_lookup().
Referenced by ompi_group_incl_plist().