2008-03-05 15:22:34 +03:00
|
|
|
/*
|
2009-01-11 05:30:00 +03:00
|
|
|
* Copyright (c) 2007-2008 Cisco Systems, Inc. All rights reserved.
|
2008-03-05 15:22:34 +03:00
|
|
|
* Copyright (c) 2004-2007 The University of Tennessee and The University
|
|
|
|
* of Tennessee Research Foundation. All rights
|
|
|
|
* reserved.
|
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* Copyright (C) 2000-2004 by Etnus, LLC.
|
|
|
|
* Copyright (C) 1999 by Etnus, Inc.
|
|
|
|
* Copyright (C) 1997-1998 Dolphin Interconnect Solutions Inc.
|
|
|
|
*
|
|
|
|
* Permission is hereby granted to use, reproduce, prepare derivative
|
|
|
|
* works, and to redistribute to others.
|
|
|
|
*
|
|
|
|
* DISCLAIMER
|
|
|
|
*
|
|
|
|
* Neither Dolphin Interconnect Solutions, Etnus LLC, nor any of their
|
|
|
|
* employees, makes any warranty express or implied, or assumes any
|
|
|
|
* legal liability or responsibility for the accuracy, completeness,
|
|
|
|
* or usefulness of any information, apparatus, product, or process
|
|
|
|
* disclosed, or represents that its use would not infringe privately
|
|
|
|
* owned rights.
|
|
|
|
*
|
|
|
|
* This code was written by
|
|
|
|
* James Cownie: Dolphin Interconnect Solutions. <jcownie@dolphinics.com>
|
|
|
|
* Etnus LLC <jcownie@etnus.com>
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#ifndef OMPI_COMMON_DLL_DEFS_H
|
|
|
|
#define OMPI_COMMON_DLL_DEFS_H
|
|
|
|
|
|
|
|
#include "msgq_interface.h"
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* Information associated with a specific executable image. Common
|
|
|
|
* across all DLLs.
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
/* Functions needed here */
|
|
|
|
const struct mqs_image_callbacks * image_callbacks;
|
|
|
|
|
|
|
|
/* basic structures */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int opal_list_next;
|
|
|
|
} offset;
|
|
|
|
} opal_list_item_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int opal_list_sentinel;
|
|
|
|
} offset;
|
|
|
|
} opal_list_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
} ompi_free_list_item_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
2008-08-12 03:40:09 +04:00
|
|
|
int fl_frag_class; /* opal_class_t* */
|
|
|
|
int fl_mpool; /* struct mca_mpool_base_module_t* */
|
|
|
|
int fl_frag_size; /* size_t */
|
|
|
|
int fl_frag_alignment; /* size_t */
|
|
|
|
int fl_allocations; /* opal_list_t */
|
|
|
|
int fl_max_to_alloc; /* size_t */
|
|
|
|
int fl_num_per_alloc; /* size_t */
|
|
|
|
int fl_num_allocated; /* size_t */
|
2008-03-05 15:22:34 +03:00
|
|
|
} offset;
|
|
|
|
} ompi_free_list_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int ht_table;
|
|
|
|
int ht_table_size;
|
|
|
|
int ht_size;
|
|
|
|
int ht_mask;
|
|
|
|
} offset;
|
|
|
|
} opal_hash_table_t;
|
|
|
|
/* requests structures */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int req_type;
|
|
|
|
int req_status;
|
|
|
|
int req_complete;
|
|
|
|
int req_state;
|
|
|
|
int req_f_to_c_index;
|
|
|
|
} offset;
|
|
|
|
} ompi_request_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int req_addr;
|
|
|
|
int req_count;
|
|
|
|
int req_peer;
|
|
|
|
int req_tag;
|
|
|
|
int req_comm;
|
|
|
|
int req_datatype;
|
|
|
|
int req_proc;
|
|
|
|
int req_sequence;
|
|
|
|
int req_type;
|
|
|
|
int req_pml_complete;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_base_request_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int req_addr;
|
|
|
|
int req_bytes_packed;
|
|
|
|
int req_send_mode;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_base_send_request_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int req_bytes_packed;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_base_recv_request_t;
|
|
|
|
#if 0
|
|
|
|
/* fragments for unexpected messages (as well as theirs headers) */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int hdr;
|
|
|
|
int request;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_ob1_recv_frag_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int hdr_type;
|
|
|
|
int hdr_flags;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_ob1_common_hdr_t;
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int hdr_common;
|
|
|
|
int hdr_ctx;
|
|
|
|
int hdr_src;
|
|
|
|
int hdr_tag;
|
|
|
|
int hdr_seq;
|
|
|
|
} offset;
|
|
|
|
} mca_pml_ob1_match_hdr_t;
|
|
|
|
#endif
|
|
|
|
/* opal_pointer_array structure */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int lowest_free;
|
|
|
|
int number_free;
|
|
|
|
int size;
|
|
|
|
int addr;
|
|
|
|
} offset;
|
|
|
|
} opal_pointer_array_t;
|
|
|
|
/* group structure */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int grp_proc_count;
|
2008-08-28 16:19:49 +04:00
|
|
|
int grp_proc_pointers;
|
2008-03-05 15:22:34 +03:00
|
|
|
int grp_my_rank;
|
|
|
|
int grp_flags;
|
|
|
|
} offset;
|
|
|
|
} ompi_group_t;
|
|
|
|
/* communicator structure */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int c_name;
|
|
|
|
int c_contextid;
|
|
|
|
int c_my_rank;
|
|
|
|
int c_local_group;
|
|
|
|
int c_remote_group;
|
|
|
|
int c_flags;
|
|
|
|
int c_f_to_c_index;
|
|
|
|
int c_topo_comm;
|
|
|
|
int c_keyhash;
|
|
|
|
} offset;
|
|
|
|
} ompi_communicator_t;
|
|
|
|
/* base topology information in a communicator */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int mtc_ndims_or_nnodes;
|
|
|
|
int mtc_dims_or_index;
|
|
|
|
int mtc_periods_or_edges;
|
|
|
|
int mtc_reorder;
|
|
|
|
} offset;
|
|
|
|
} ompi_mca_topo_base_comm_1_0_0_t;
|
|
|
|
/* MPI_Status */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int MPI_SOURCE;
|
|
|
|
int MPI_TAG;
|
|
|
|
int MPI_ERROR;
|
|
|
|
int _count;
|
|
|
|
int _cancelled;
|
|
|
|
} offset;
|
|
|
|
} ompi_status_public_t;
|
|
|
|
/* datatype structure */
|
|
|
|
struct {
|
|
|
|
mqs_type *type;
|
|
|
|
int size;
|
|
|
|
struct {
|
|
|
|
int size;
|
|
|
|
int name;
|
|
|
|
} offset;
|
|
|
|
} ompi_datatype_t;
|
|
|
|
|
|
|
|
/* For the caller to hang their own stuff */
|
|
|
|
void *extra;
|
|
|
|
} mpi_image_info;
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
/* Information for a single process. Common across all DLLs.
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
const struct mqs_process_callbacks * process_callbacks; /* Functions needed here */
|
|
|
|
|
|
|
|
mqs_target_type_sizes sizes; /* Process architecture information */
|
|
|
|
|
|
|
|
/* For the caller to hang their own stuff */
|
|
|
|
void *extra;
|
|
|
|
} mpi_process_info;
|
|
|
|
|
|
|
|
/**********************************************************************/
|
|
|
|
/* Macros to make it transparent that we're calling the TV functions
|
|
|
|
* through function pointers.
|
|
|
|
*/
|
|
|
|
#define mqs_malloc (mqs_basic_entrypoints->mqs_malloc_fp)
|
|
|
|
#define mqs_free (mqs_basic_entrypoints->mqs_free_fp)
|
|
|
|
#define mqs_prints (mqs_basic_entrypoints->mqs_dprints_fp)
|
|
|
|
#define mqs_put_image_info (mqs_basic_entrypoints->mqs_put_image_info_fp)
|
|
|
|
#define mqs_get_image_info (mqs_basic_entrypoints->mqs_get_image_info_fp)
|
|
|
|
#define mqs_put_process_info (mqs_basic_entrypoints->mqs_put_process_info_fp)
|
|
|
|
#define mqs_get_process_info (mqs_basic_entrypoints->mqs_get_process_info_fp)
|
|
|
|
|
|
|
|
/* These macros *RELY* on the function already having set up the conventional
|
|
|
|
* local variables i_info or p_info.
|
|
|
|
*/
|
|
|
|
#define mqs_find_type (i_info->image_callbacks->mqs_find_type_fp)
|
|
|
|
#define mqs_field_offset (i_info->image_callbacks->mqs_field_offset_fp)
|
|
|
|
#define mqs_sizeof (i_info->image_callbacks->mqs_sizeof_fp)
|
|
|
|
#define mqs_get_type_sizes (i_info->image_callbacks->mqs_get_type_sizes_fp)
|
|
|
|
#define mqs_find_function (i_info->image_callbacks->mqs_find_function_fp)
|
|
|
|
#define mqs_find_symbol (i_info->image_callbacks->mqs_find_symbol_fp)
|
|
|
|
|
|
|
|
#define mqs_get_image (p_info->process_callbacks->mqs_get_image_fp)
|
|
|
|
#define mqs_get_global_rank (p_info->process_callbacks->mqs_get_global_rank_fp)
|
|
|
|
#define mqs_fetch_data (p_info->process_callbacks->mqs_fetch_data_fp)
|
|
|
|
#define mqs_target_to_host (p_info->process_callbacks->mqs_target_to_host_fp)
|
|
|
|
|
|
|
|
/* Basic callbacks into the debugger */
|
|
|
|
extern const mqs_basic_callbacks *mqs_basic_entrypoints;
|
|
|
|
|
|
|
|
/* OMPI-specific functions */
|
|
|
|
int ompi_fill_in_type_info(mqs_image *image, char **message);
|
|
|
|
|
|
|
|
/* Fetch a pointer from the process */
|
|
|
|
mqs_taddr_t ompi_fetch_pointer(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info);
|
|
|
|
|
|
|
|
/* Fetch an int from the process */
|
|
|
|
mqs_tword_t ompi_fetch_int(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info);
|
|
|
|
|
|
|
|
/* Fetch a bool from the process */
|
|
|
|
mqs_tword_t ompi_fetch_bool(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info);
|
|
|
|
|
|
|
|
/* Fetch a size_t from the process */
|
|
|
|
mqs_taddr_t ompi_fetch_size_t(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info);
|
|
|
|
|
|
|
|
/* Helpers to fetch stuff from an opal_pointer_array_t */
|
|
|
|
int ompi_fetch_opal_pointer_array_info(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info,
|
|
|
|
int *size, int *lowest_free,
|
|
|
|
int *number_free);
|
|
|
|
int ompi_fetch_opal_pointer_array_item(mqs_process *proc, mqs_taddr_t addr,
|
|
|
|
mpi_process_info *p_info, int index,
|
|
|
|
mqs_taddr_t *item);
|
|
|
|
#endif
|