group.h
来自「MPI stands for the Message Passing Inter」· C头文件 代码 · 共 181 行
H
181 行
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2006 University of Houston. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ *//** * @file: * * Infrastructure for MPI group support. */#ifndef OMPI_GROUP_H#define OMPI_GROUP_H#include "opal/util/output.h"#include "mpi.h"#include "ompi/class/ompi_pointer_array.h"#if defined(c_plusplus) || defined(__cplusplus)extern "C" {#endif/** * Group structure */struct ompi_group_t { opal_object_t super; /**< base class */ int grp_proc_count; /**< number of processes in group */ int grp_my_rank; /**< rank in group */ int grp_f_to_c_index; /**< index in Fortran <-> C translation array */ uint32_t grp_flags; /**< flags, e.g. freed, cannot be freed etc.*/ struct ompi_proc_t **grp_proc_pointers; /**< list of pointers to ompi_proc_t structures for each process in the group */};typedef struct ompi_group_t ompi_group_t;OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_group_t);/* Some definitions for the flags */#define OMPI_GROUP_ISFREED 0x00000001#define OMPI_GROUP_INTRINSIC 0x00000002#define OMPI_GROUP_IS_INTRINSIC(_group) ((_group)->grp_flags&OMPI_GROUP_INTRINSIC)/** * Table for Fortran <-> C group handle conversion */OMPI_DECLSPEC extern struct ompi_pointer_array_t *ompi_group_f_to_c_table;OMPI_DECLSPEC extern ompi_group_t ompi_mpi_group_null;/* * function prototypes *//** * Allocate a new group structure. * * @param group_size Number of MPI processes in the group * * @return Pointer to new group structure */ompi_group_t *ompi_group_allocate(int group_size);/** * Increment the reference count of the proc structures. * * @param group Pointer to ompi_group_t structute (IN) * */void ompi_group_increment_proc_count(ompi_group_t *group);/** * Decrement the reference count of the proc structures. * * @param group Pointer to ompi_group_t structute (IN) * */void ompi_group_decrement_proc_count(ompi_group_t *group);/** * Initialize OMPI group infrastructure. * * @return Error code */int ompi_group_init(void);/** * Clean up OMPI group infrastructure. * * @return Error code */int ompi_group_finalize(void);/** * Get group size. * * @param group Pointer to ompi_group_t structute (IN) * * @return Group size */static inline int ompi_group_size(ompi_group_t *group){ return group->grp_proc_count;}/** * Get group rank * * @param group Pointer to ompi_group_t structure (IN) * * @return Group rank */static inline int ompi_group_rank(ompi_group_t *group){ return group->grp_my_rank;}/** * Set group rank in the input group structure * * @param group Group Pointer to ompi_group_t structure (IN) * @param proc_pointer Pointer to ompi_proc_t structure for process. * MPI_PROC_NULL may be used to indicate proc not * in group * * @return Error code */void ompi_set_group_rank(ompi_group_t *group, struct ompi_proc_t *proc_pointer);/** * Abstracting MPI_Group_translate_ranks to an ompi function for internal use */int ompi_group_translate_ranks ( ompi_group_t *group1, int n_ranks, int *ranks1, ompi_group_t *group2, int *ranks2);/** * Abstracting MPI_Group_free, since it is required by some internal functions... */int ompi_group_free (ompi_group_t **group);/** * Prototypes for the group back-end functions. Argument lists are similar to the according * C MPI functions. */int ompi_group_union (ompi_group_t* group1, ompi_group_t* group2, ompi_group_t **new_group); int ompi_group_incl(ompi_group_t* group, int n, int *ranks, ompi_group_t **new_group);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_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);#if defined(c_plusplus) || defined(__cplusplus)}#endif#endif /* OMPI_GROUP_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?