1
1
openmpi/ompi/mca/common/portals/common_portals.h
Galen Shipman 44003a41f2 Update common_portals to allow using portals interconnect with a modex rather
than relying on cnos to get the nid/pid map. 

This commit was SVN r17588.
2008-02-25 19:17:21 +00:00

164 строки
5.0 KiB
C

/*
* Copyright (c) 2004-2006 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-2006 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef OMPI_MCA_COMMON_PORTALS_H
#define OMPI_MCA_COMMON_PORTALS_H
#if OMPI_PORTALS_UTCP
#include <portals3.h>
#include <stdio.h>
#include <p3nal_utcp.h>
#include <p3rt/p3rt.h>
#include <p3api/debug.h>
#define OMPI_BTL_PORTALS_SEND_TABLE_ID 0
#define OMPI_BTL_PORTALS_RDMA_TABLE_ID 1
#define OMPI_MTL_PORTALS_SEND_TABLE_ID 2
#define OMPI_MTL_PORTALS_READ_TABLE_ID 3
#define OMPI_MTL_PORTALS_ACK_TABLE_ID 4
#elif (OMPI_PORTALS_CRAYXT3 || OMPI_PORTALS_CRAYXT3_MODEX)
#include <portals/portals3.h>
#define PTL_EQ_HANDLER_NONE NULL
/* Cray's definition, differs from the spec */
#define PTL_NO_ACK_REQ PTL_NOACK_REQ
#define OMPI_BTL_PORTALS_SEND_TABLE_ID 30
#define OMPI_BTL_PORTALS_RDMA_TABLE_ID 31
#define OMPI_MTL_PORTALS_SEND_TABLE_ID 32
#define OMPI_MTL_PORTALS_READ_TABLE_ID 33
#define OMPI_MTL_PORTALS_ACK_TABLE_ID 34
#else
#error "Unknown Portals library configuration"
#endif
#include "ompi/proc/proc.h"
/**
* Simple identifier for identifying node/process
*
* Get a string representing a simple way to identify the node/rank of
* the current process. Currently returns the rank in the job on the
* XT-3 or the hostname/pid on the reference implementation.
*
* \note Caller is responsible for calling free() on the returned
* string.
*/
char* ompi_common_portals_nodeid(void);
/**
* Register MCA parameters for Portals code
*
* Register MCA parameters for Portals common code. This should be
* called during component open so that parameters are available to
* omp_info and the like. This call will not intiailize the Portals
* interface or cause any communication.
*
* @retval OMPI_SUCCESS
*/
int ompi_common_portals_register_mca(void);
/**
* Initialize compatibility code
*
* Initialize Portals compatibility code. A best effort is made to
* initialize Portals (with PtlInit() and PtlNIInit(), although this
* may not be possible if use of the modex is required to setup the
* network (as is the case with the utcp reference implementation).
*
* @param ni_handle (OUT) network interface handle
* @param bool (OUT) true if using accelerated Portals, false otherwise
*
* @retval OMPI_SUCCESS Portals successfully initialized
* @retval OMPI_ERR_NOT_AVAILABLE Portals could not be initialized
*/
int ompi_common_portals_initialize(ptl_handle_ni_t *ni_handle, bool *accel);
/**
* Initialize network interface
*
* Initialize the portals network interface. The initializization may
* actually have happened in ompi_common_portals_initialize(), but
* this will return the network interface handle. This function may
* require some information shared by the modex, so should only be
* called after the modex data is available.
*
* @param ni_handle (OUT) network interface handle
* @param bool (OUT) true if using accelerated Portals, false otherwise
*
* @retval OMPI_SUCCESS Portals network interface successfully initialized
* @retval OMPI_ERROR Something bad happened
*/
int ompi_common_portals_ni_initialize(ptl_handle_ni_t *ni_handle, bool *accel);
/**
* Get process_id_t array for proc list
*
* Get ptl_process_id_t array for proc list
*
* @param nprocs (IN) Number of procs in proc list
* @param procs (IN) List of OMPI procs
* @param portals_procs (OUT) array of ptl_process_id_t
* structures associated with OMPI procs
*
* @retval OMPI_SUCCESS All went well
* @retval OMPI_ERROR All went poorly
*/
int ompi_common_portals_get_procs(size_t nprocs,
struct ompi_proc_t **procs,
ptl_process_id_t *portals_procs);
/**
* Shut down Portals network interface
*
* Shut down Portals network devince , including calling PtlNIFini()
* if appropriate. The common code will reference count so that it is
* safe for each component that calls
* ompi_component_portals_ni_initialize() to call
* ompi_common_portals_ni_finalize()
*/
int ompi_common_portals_ni_finalize(void);
/**
* Shut down Portals
*
* Shut down Portals, including calling PtlFini() if appropriate. The
* common code will reference count so that it is safe for each
* component that calls ompi_component_portals_initialize() to call
* ompi_common_portals_finalize()
*/
int ompi_common_portals_finalize(void);
int ompi_common_portals_error_ptl_to_ompi(int ptl_error);
#endif /* OMPI_MCA_COMMON_PORTALS_H */