forked from jeffhammond/foMPI
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfompi.h
168 lines (139 loc) · 8.03 KB
/
fompi.h
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
// Copyright (c) 2012 The Trustees of University of Illinois. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "mpi.h"
#include "fompi_internal.h"
/* constants for win_create_flavor */
#define foMPI_WIN_FLAVOR_CREATE 0
#define foMPI_WIN_FLAVOR_ALLOCATE 1
#define foMPI_WIN_FLAVOR_DYNAMIC 2
/* constants for win_model */
#define foMPI_WIN_SEPARATE 0
#define foMPI_WIN_UNIFIED 1
/* asserts for one-sided communication */
#define foMPI_MODE_NOCHECK 1024
#define foMPI_MODE_NOSTORE 2048
#define foMPI_MODE_NOPUT 4096
#define foMPI_MODE_NOPRECEDE 8192
#define foMPI_MODE_NOSUCCEED 16384
/* error codes */
#define foMPI_ERROR_RMA_NO_SYNC 1
#define foMPI_ERROR_RMA_DATATYPE_MISMATCH 2
#define foMPI_ERROR_RMA_NO_LOCK_HOLDING 3
#define foMPI_ERROR_RMA_SYNC_CONFLICT 4
#define foMPI_ERROR_RMA_WRITE_SHARED_CONFLICT 5
#define foMPI_ERROR_RMA_WIN_MEM_NOT_FOUND 6
#define foMPI_OP_NOT_SUPPORTED 7
#define foMPI_DATATYPE_NOT_SUPPORTED 8
#define foMPI_NAME_ABBREVIATED 9
/* constants for foMPI_OP */
/* TODO: not real MPI_Op objects */
/* the numbers should be contiguous, since some sanity tests rely on that fact */
#define foMPI_SUM 0
#define foMPI_PROD 1
#define foMPI_MAX 2
#define foMPI_MIN 3
#define foMPI_LAND 4
#define foMPI_LOR 5
#define foMPI_LXOR 6
#define foMPI_BAND 7
#define foMPI_BOR 8
#define foMPI_BXOR 9
#define foMPI_MAXLOC 10
#define foMPI_MINLOC 11
#define foMPI_REPLACE 12
#define foMPI_NO_OP 13
/* constants for lock type */
#define foMPI_LOCK_SHARED 1
#define foMPI_LOCK_EXCLUSIVE 2
/* constants for attributes */
#define foMPI_WIN_BASE 0
#define foMPI_WIN_SIZE 1
#define foMPI_WIN_DISP_UNIT 2
#define foMPI_WIN_CREATE_FLAVOR 3
#define foMPI_WIN_MODEL 4
#define foMPI_TAG_UB ( 32767 )
#define foMPI_ANY_SOURCE -1
#define foMPI_ANY_TAG -2
#define foMPI_REQUEST_NULL NULL
#define foMPI_UNDEFINED 17383
#define foMPI_WIN_NULL NULL
#define foMPI_COMM_NULL NULL
#ifdef __cplusplus
extern "C" {
#endif
/* function prototypes */
int foMPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, foMPI_Win *win);
int foMPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr, foMPI_Win *win);
int foMPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, foMPI_Win *win);
int foMPI_Win_free(foMPI_Win *win);
int foMPI_Win_attach(foMPI_Win win, void *base, MPI_Aint size);
int foMPI_Win_detach(foMPI_Win win, const void *base);
int foMPI_Win_fence(int assert, foMPI_Win win);
int foMPI_Win_start(MPI_Group group, int assert, foMPI_Win win);
int foMPI_Win_complete(foMPI_Win win);
int foMPI_Win_post(MPI_Group group, int assert, foMPI_Win win);
int foMPI_Win_wait(foMPI_Win win);
int foMPI_Win_test(foMPI_Win win, int *flag);
int foMPI_Win_lock(int lock_type, int rank, int assert, foMPI_Win win);
int foMPI_Win_unlock(int rank, foMPI_Win win);
int foMPI_Win_lock_all(int assert, foMPI_Win win);
int foMPI_Win_unlock_all(foMPI_Win win);
int foMPI_Win_flush(int rank, foMPI_Win win);
int foMPI_Win_flush_all(foMPI_Win win);
int foMPI_Win_flush_local(int rank, foMPI_Win win);
int foMPI_Win_flush_local_all(foMPI_Win win);
int foMPI_Win_sync(foMPI_Win win);
int foMPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, foMPI_Win win);
int foMPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, foMPI_Win win);
int foMPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, foMPI_Op op, foMPI_Win win);
int foMPI_Get_accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype,
int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, foMPI_Op op, foMPI_Win win);
int foMPI_Fetch_and_op(const void *origin_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, foMPI_Op op, foMPI_Win win);
int foMPI_Compare_and_swap(const void *origin_addr, const void *compare_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, foMPI_Win win);
int foMPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, foMPI_Win win, foMPI_Request *request);
int foMPI_Rget(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, foMPI_Win win, foMPI_Request *request);
int foMPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, foMPI_Op op, foMPI_Win win, foMPI_Request *request);
int foMPI_Rget_accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype,
int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, foMPI_Op op, foMPI_Win win, foMPI_Request *request);
int foMPI_Win_get_group(foMPI_Win win, MPI_Group *group);
int foMPI_Win_set_name(foMPI_Win win, const char *win_name);
int foMPI_Win_get_name(foMPI_Win win, char *win_name, int *resultlen);
int foMPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn, MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval, void *extra_state);
int foMPI_Win_free_keyval(int *win_keyval);
int foMPI_Win_set_attr(foMPI_Win win, int win_keyval, void *attribute_val);
int foMPI_Win_get_attr(foMPI_Win win, int win_keyval, void *attribute_val, int *flag);
int foMPI_Win_delete_attr(foMPI_Win win, int win_keyval);
#ifdef UGNI
/*MPI-extended (with Notifications)*/
int foMPI_Notify_init(foMPI_Win win, int src_rank, int tag, int count, foMPI_Request *request);
int foMPI_Put_notify(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype,
foMPI_Win win, int tag);
int foMPI_Get_notify(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, foMPI_Win win, int tag);
int foMPI_Rput_notify(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype,
foMPI_Win win, foMPI_Request *request, int tag);
int foMPI_Rget_notify(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype,
foMPI_Win win, foMPI_Request *request, int tag);
#endif
/* TODO: remove this */
int foMPI_Init( int *argc, char ***argv );
int foMPI_Finalize();
int foMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);
int foMPI_Wait(foMPI_Request *request, MPI_Status *status);
int foMPI_Test(foMPI_Request *request, int *flag, MPI_Status *status);
int foMPI_Waitany(int count, foMPI_Request array_of_requests[], int *index, MPI_Status *status);
int foMPI_Testany(int count, foMPI_Request array_of_requests[], int *index, int *flag, MPI_Status *status);
int foMPI_Request_free(foMPI_Request *request);
int foMPI_Start(foMPI_Request *request);
int foMPI_Type_free( MPI_Datatype *datatype);
#ifdef __cplusplus
}
#endif