/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2006 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$ * * Additional copyrights may follow * * $HEADER$ */ /** * @file */ #ifndef MCA_PML_OB1_COMM_H #define MCA_PML_OB1_COMM_H #include "opal/threads/mutex.h" #include "opal/class/opal_list.h" #include "ompi/proc/proc.h" BEGIN_C_DECLS struct mca_pml_ob1_comm_proc_t { opal_object_t super; uint16_t expected_sequence; /**< send message sequence number - receiver side */ struct ompi_proc_t* ompi_proc; #if OPAL_ENABLE_MULTI_THREADS volatile int32_t send_sequence; /**< send side sequence number */ #else int32_t send_sequence; /**< send side sequence number */ #endif opal_list_t frags_cant_match; /**< out-of-order fragment queues */ opal_list_t specific_receives; /**< queues of unmatched specific receives */ opal_list_t unexpected_frags; /**< unexpected fragment queues */ }; typedef struct mca_pml_ob1_comm_proc_t mca_pml_ob1_comm_proc_t; /** * Cached on ompi_communicator_t to hold queues/state * used by the PML<->PTL interface for matching logic. */ struct mca_pml_comm_t { opal_object_t super; #if OPAL_ENABLE_MULTI_THREADS volatile uint32_t recv_sequence; /**< recv request sequence number - receiver side */ #else uint32_t recv_sequence; /**< recv request sequence number - receiver side */ #endif opal_mutex_t matching_lock; /**< matching lock */ opal_list_t wild_receives; /**< queue of unmatched wild (source process not specified) receives */ mca_pml_ob1_comm_proc_t* procs; size_t num_procs; size_t last_probed; }; typedef struct mca_pml_comm_t mca_pml_ob1_comm_t; OBJ_CLASS_DECLARATION(mca_pml_ob1_comm_t); /** * Initialize an instance of mca_pml_ob1_comm_t based on the communicator size. * * @param comm Instance of mca_pml_ob1_comm_t * @param size Size of communicator * @return OMPI_SUCCESS or error status on failure. */ extern int mca_pml_ob1_comm_init_size(mca_pml_ob1_comm_t* comm, size_t size); END_C_DECLS #endif