File: shmem.h

package info (click to toggle)
openmpi 5.0.8-4
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 201,684 kB
  • sloc: ansic: 613,078; makefile: 42,353; sh: 11,194; javascript: 9,244; f90: 7,052; java: 6,404; perl: 5,179; python: 1,859; lex: 740; fortran: 61; cpp: 20; tcl: 12
file content (178 lines) | stat: -rw-r--r-- 5,690 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
 * Copyright (c) 2004-2008 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) 2007-2015 Cisco Systems, Inc.  All rights reserved.
 * Copyright (c) 2009      Sun Microsystems, Inc.  All rights reserved.
 * Copyright (c) 2010      IBM Corporation.  All rights reserved.
 * Copyright (c) 2010-2015 Los Alamos National Security, LLC.
 *                         All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 */

/**
 * @file
 *
 * shmem (shared memory backing facility) framework component interface
 * definitions.
 *
 * usage example: see ompi/mca/common/sm
 *
 * The module has the following functions:
 *
 * - module_init
 * - segment_create
 * - ds_copy
 * - segment_attach
 * - segment_detach
 * - unlink
 * - module_finalize
 */

#ifndef OPAL_SHMEM_H
#define OPAL_SHMEM_H

#include "opal_config.h"

#include "opal/mca/base/base.h"
#include "opal/mca/mca.h"

#include "opal/mca/shmem/shmem_types.h"

BEGIN_C_DECLS

/* ////////////////////////////////////////////////////////////////////////// */
typedef int (*mca_shmem_base_component_runtime_query_fn_t)(mca_base_module_t **module,
                                                           int *priority, const char *hint);

/* structure for shmem components. */
struct opal_shmem_base_component_2_0_0_t {
    /* base MCA component */
    mca_base_component_t base_version;
    /* base MCA data */
    mca_base_component_data_t base_data;
    /* component runtime query */
    mca_shmem_base_component_runtime_query_fn_t runtime_query;
};

/* convenience typedefs */
typedef struct opal_shmem_base_component_2_0_0_t opal_shmem_base_component_2_0_0_t;

typedef struct opal_shmem_base_component_2_0_0_t opal_shmem_base_component_t;

/* ////////////////////////////////////////////////////////////////////////// */
/* shmem API function pointers */

/**
 * module initialization function.
 * @return OPAL_SUCCESS on success.
 */
typedef int (*opal_shmem_base_module_init_fn_t)(void);

/**
 * copy shmem data structure information pointed to by from to the structure
 * pointed to by to.
 *
 * @param from  source pointer (IN).
 *
 * @param to    destination pointer (OUT).
 *
 * @return OPAL_SUCCESS on success.
 */
typedef int (*opal_shmem_base_ds_copy_fn_t)(const opal_shmem_ds_t *from, opal_shmem_ds_t *to);

/**
 * create a new shared memory segment and initialize members in structure
 * pointed to by ds_buf.
 *
 * @param ds_buf               pointer to opal_shmem_ds_t typedef'd structure
 *                             defined in shmem_types.h (OUT).
 *
 * @param file_name file_name  unique string identifier that must be a valid,
 *                             writable path (IN).
 *
 * @param size                 size of the shared memory segment.
 *
 * @return OPAL_SUCCESS on success.
 */
typedef int (*opal_shmem_base_module_segment_create_fn_t)(opal_shmem_ds_t *ds_buf,
                                                          const char *file_name, size_t size);

/**
 * attach to an existing shared memory segment initialized by segment_create.
 *
 * @param ds_buf  pointer to initialized opal_shmem_ds_t typedef'd
 *                structure (IN/OUT).
 *
 * @return        base address of shared memory segment on success. returns
 *                NULL otherwise.
 */
typedef void *(*opal_shmem_base_module_segment_attach_fn_t)(opal_shmem_ds_t *ds_buf);

/**
 * detach from an existing shared memory segment.
 *
 * @param ds_buf  pointer to initialized opal_shmem_ds_t typedef'd structure
 *                (IN/OUT).
 *
 * @return OPAL_SUCCESS on success.
 */
typedef int (*opal_shmem_base_module_segment_detach_fn_t)(opal_shmem_ds_t *ds_buf);

/**
 * unlink an existing shared memory segment.
 *
 * @param ds_buf  pointer to initialized opal_shmem_ds_t typedef'd structure
 *                (IN/OUT).
 *
 * @return OPAL_SUCCESS on success.
 */
typedef int (*opal_shmem_base_module_unlink_fn_t)(opal_shmem_ds_t *ds_buf);

/**
 * module finalize function.  invoked by the base on the selected
 * module when the shmem framework is being shut down.
 */
typedef int (*opal_shmem_base_module_finalize_fn_t)(void);

/**
 * structure for shmem modules
 */
struct opal_shmem_base_module_2_0_0_t {
    mca_base_module_t base;
    opal_shmem_base_module_init_fn_t module_init;
    opal_shmem_base_module_segment_create_fn_t segment_create;
    opal_shmem_base_ds_copy_fn_t ds_copy;
    opal_shmem_base_module_segment_attach_fn_t segment_attach;
    opal_shmem_base_module_segment_detach_fn_t segment_detach;
    opal_shmem_base_module_unlink_fn_t unlink;
    opal_shmem_base_module_finalize_fn_t module_finalize;
};

/**
 * convenience typedefs
 */
typedef struct opal_shmem_base_module_2_0_0_t opal_shmem_base_module_2_0_0_t;
typedef struct opal_shmem_base_module_2_0_0_t opal_shmem_base_module_t;

/**
 * macro for use in components that are of type shmem
 * see: opal/mca/mca.h for more information
 */
#define OPAL_SHMEM_BASE_VERSION_2_0_0 OPAL_MCA_BASE_VERSION_2_1_0("shmem", 2, 0, 0)

END_C_DECLS

#endif /* OPAL_SHMEM_H */