File: grequest.h

package info (click to toggle)
openmpi 5.0.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 202,312 kB
  • sloc: ansic: 612,441; makefile: 42,495; sh: 11,230; javascript: 9,244; f90: 7,052; java: 6,404; perl: 5,154; python: 1,856; lex: 740; fortran: 61; cpp: 20; tcl: 12
file content (135 lines) | stat: -rw-r--r-- 4,150 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
/*
 * 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      Cisco Systems, Inc.  All rights reserved.
 * Copyright (c) 2018      Research Organization for Information Science
 *                         and Technology (RIST).  All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 */

#ifndef OMPI_GEN_REQUEST_H
#define OMPI_GEN_REQUEST_H

#include "ompi_config.h"
#include "ompi/request/request.h"

BEGIN_C_DECLS
OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_grequest_t);

/**
 * Fortran type for generalized request query function
 */
typedef void (MPI_F_Grequest_query_function)(MPI_Aint *extra_state,
                                             MPI_Fint *status,
                                             MPI_Fint *ierr);
/**
 * Fortran type for generalized request free function
 */
typedef void (MPI_F_Grequest_free_function)(MPI_Aint *extra_state,
                                            MPI_Fint *ierr);
/**
 * Fortran type for generalized request cancel function
 */
typedef void (MPI_F_Grequest_cancel_function)(MPI_Aint *extra_state,
                                              ompi_fortran_logical_t *complete,
                                              MPI_Fint *ierr);

#if OMPI_ENABLE_GREQUEST_EXTENSIONS
/**
 * Fortran type for generalized request query function
 */
typedef int (ompi_grequestx_poll_function)(void *, MPI_Status *);

typedef void (ompi_f_grequestx_poll_function)(MPI_Aint *extra_state,
                                              MPI_Fint *status,
                                              MPI_Fint *ierr);
#endif

/**
 * Union for query function for use in ompi_grequest_t
 */
typedef union {
    MPI_Grequest_query_function*   c_query;
    MPI_F_Grequest_query_function* f_query;
} MPI_Grequest_query_fct_t;

/**
 * Union for free function for use in ompi_grequest_t
 */
typedef union {
    MPI_Grequest_free_function*   c_free;
    MPI_F_Grequest_free_function* f_free;
} MPI_Grequest_free_fct_t;

/**
 * Union for cancel function for use in ompi_grequest_t
 */
typedef union {
    MPI_Grequest_cancel_function*   c_cancel;
    MPI_F_Grequest_cancel_function* f_cancel;
} MPI_Grequest_cancel_fct_t;

#if OMPI_ENABLE_GREQUEST_EXTENSIONS
/**
 * Union for poll function for use in ompi_grequestx_t
 */
typedef union {
    ompi_grequestx_poll_function*   c_poll;
    ompi_f_grequestx_poll_function*  f_poll;
} ompi_grequestx_poll_fct_t;
#endif

/**
 * Main structure for MPI generalized requests
 */
struct ompi_grequest_t {
    ompi_request_t greq_base;
    MPI_Grequest_query_fct_t greq_query;
    MPI_Grequest_free_fct_t greq_free;
    MPI_Grequest_cancel_fct_t greq_cancel;
#if OMPI_ENABLE_GREQUEST_EXTENSIONS
    ompi_grequestx_poll_fct_t greq_poll;
#endif
    void *greq_state;
    bool greq_funcs_are_c;
};
/**
 * Convenience typedef
 */
typedef struct ompi_grequest_t ompi_grequest_t;

/**
 * Start a generalized request (back end for MPI_GREQUEST_START)
 */
OMPI_DECLSPEC int ompi_grequest_start(
    MPI_Grequest_query_function *gquery,
    MPI_Grequest_free_function *gfree,
    MPI_Grequest_cancel_function *gcancel,
    void* gstate,
    ompi_request_t** request);

/**
 * Complete a generalized request (back end for MPI_GREQUEST_COMPLETE)
 */
OMPI_DECLSPEC int ompi_grequest_complete(ompi_request_t *req);

/**
 * Invoke the query function on a generalized request
 */
OMPI_DECLSPEC int ompi_grequest_invoke_query(ompi_request_t *request,
                                             ompi_status_public_t *status);
END_C_DECLS

#endif