1 /*
2 * Copyright (c) 2016 Mellanox Technologies, Inc.
3 * All rights reserved.
4 * $COPYRIGHT$
5 *
6 * Additional copyrights may follow
7 *
8 * $HEADER$
9 */
10
11 #include "oshmem_config.h"
12 #include "oshmem/shmem/fortran/bindings.h"
13 #include "oshmem/include/shmem.h"
14 #include "oshmem/shmem/shmem_api_logger.h"
15 #include "oshmem/runtime/runtime.h"
16 #include "oshmem/mca/spml/spml.h"
17 #include "ompi/datatype/ompi_datatype.h"
18 #include "stdio.h"
19
20 #if OSHMEM_PROFILING
21 #include "oshmem/shmem/fortran/profile/pbindings.h"
22
SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUTMEM_NBI,shmem_putmem_nbi)23 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUTMEM_NBI, shmem_putmem_nbi)
24
25 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_CHARACTER_PUT_NBI, shmem_character_put_nbi)
26 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_COMPLEX_PUT_NBI, shmem_complex_put_nbi)
27 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_DOUBLE_PUT_NBI, shmem_double_put_nbi)
28 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_INTEGER_PUT_NBI, shmem_integer_put_nbi)
29 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_LOGICAL_PUT_NBI, shmem_logical_put_nbi)
30 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_REAL_PUT_NBI, shmem_real_put_nbi)
31
32 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUT4_NBI, shmem_put4_nbi)
33 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUT8_NBI, shmem_put8_nbi)
34 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUT32_NBI, shmem_put32_nbi)
35 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUT64_NBI, shmem_put64_nbi)
36 SHMEM_GENERATE_WEAK_BINDINGS(SHMEM_PUT128_NBI, shmem_put128_nbi)
37
38 #include "oshmem/shmem/fortran/profile/defines.h"
39 #endif
40
41 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
42 SHMEM_PUTMEM_NBI,
43 shmem_putmem_nbi_,
44 shmem_putmem_nbi__,
45 shmem_putmem_nbi_f,
46 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
47 (target,source,length,pe) )
48
49 void shmem_putmem_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
50 {
51 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
52 OMPI_FINT_2_INT(*length),
53 FPTR_2_VOID_PTR(source),
54 OMPI_FINT_2_INT(*pe), NULL));
55 }
56
57 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
58 SHMEM_CHARACTER_PUT_NBI,
59 shmem_character_put_nbi_,
60 shmem_character_put_nbi__,
61 shmem_character_put_nbi_f,
62 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
63 (target,source,length,pe) )
64
shmem_character_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)65 void shmem_character_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
66 {
67 size_t character_type_size = 0;
68 ompi_datatype_type_size(&ompi_mpi_character.dt, &character_type_size);
69
70 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
71 OMPI_FINT_2_INT(*length) * character_type_size,
72 FPTR_2_VOID_PTR(source),
73 OMPI_FINT_2_INT(*pe), NULL));
74 }
75
76 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
77 SHMEM_COMPLEX_PUT_NBI,
78 shmem_complex_put_nbi_,
79 shmem_complex_put_nbi__,
80 shmem_complex_put_nbi_f,
81 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
82 (target,source,length,pe) )
83
shmem_complex_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)84 void shmem_complex_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
85 {
86 size_t complex_type_size = 0;
87 ompi_datatype_type_size(&ompi_mpi_cplex.dt, &complex_type_size);
88
89 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
90 OMPI_FINT_2_INT(*length) * complex_type_size,
91 FPTR_2_VOID_PTR(source),
92 OMPI_FINT_2_INT(*pe), NULL));
93 }
94
95 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
96 SHMEM_DOUBLE_PUT_NBI,
97 shmem_double_put_nbi_,
98 shmem_double_put_nbi__,
99 shmem_double_put_nbi_f,
100 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
101 (target,source,length,pe) )
102
shmem_double_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)103 void shmem_double_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
104 {
105 size_t double_precision_type_size = 0;
106 ompi_datatype_type_size(&ompi_mpi_dblprec.dt, &double_precision_type_size);
107
108 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
109 OMPI_FINT_2_INT(*length) * double_precision_type_size,
110 FPTR_2_VOID_PTR(source),
111 OMPI_FINT_2_INT(*pe), NULL));
112 }
113
114 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
115 SHMEM_INTEGER_PUT_NBI,
116 shmem_integer_put_nbi_,
117 shmem_integer_put_nbi__,
118 shmem_integer_put_nbi_f,
119 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
120 (target,source,length,pe) )
121
shmem_integer_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)122 void shmem_integer_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
123 {
124 size_t integer_type_size = 0;
125 ompi_datatype_type_size(&ompi_mpi_integer.dt, &integer_type_size);
126
127 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
128 OMPI_FINT_2_INT(*length) * integer_type_size,
129 FPTR_2_VOID_PTR(source),
130 OMPI_FINT_2_INT(*pe), NULL));
131 }
132
133 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
134 SHMEM_LOGICAL_PUT_NBI,
135 shmem_logical_put_nbi_,
136 shmem_logical_put_nbi__,
137 shmem_logical_put_nbi_f,
138 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
139 (target,source,length,pe) )
140
shmem_logical_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)141 void shmem_logical_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
142 {
143 size_t logical_type_size = 0;
144 ompi_datatype_type_size(&ompi_mpi_logical.dt, &logical_type_size);
145
146 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
147 OMPI_FINT_2_INT(*length) * logical_type_size,
148 FPTR_2_VOID_PTR(source),
149 OMPI_FINT_2_INT(*pe), NULL));
150 }
151
152 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
153 SHMEM_REAL_PUT_NBI,
154 shmem_real_put_nbi_,
155 shmem_real_put_nbi__,
156 shmem_real_put_nbi_f,
157 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
158 (target,source,length,pe) )
159
shmem_real_put_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)160 void shmem_real_put_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
161 {
162 size_t real_type_size = 0;
163 ompi_datatype_type_size(&ompi_mpi_real.dt, &real_type_size);
164
165 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
166 OMPI_FINT_2_INT(*length) * real_type_size,
167 FPTR_2_VOID_PTR(source),
168 OMPI_FINT_2_INT(*pe), NULL));
169 }
170
171 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
172 SHMEM_PUT4_NBI,
173 shmem_put4_nbi_,
174 shmem_put4_nbi__,
175 shmem_put4_nbi_f,
176 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
177 (target,source,length,pe) )
178
shmem_put4_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)179 void shmem_put4_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
180 {
181 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
182 OMPI_FINT_2_INT(*length) * 4,
183 FPTR_2_VOID_PTR(source),
184 OMPI_FINT_2_INT(*pe), NULL));
185 }
186
187 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
188 SHMEM_PUT8_NBI,
189 shmem_put8_nbi_,
190 shmem_put8_nbi__,
191 shmem_put8_nbi_f,
192 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
193 (target,source,length,pe) )
194
shmem_put8_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)195 void shmem_put8_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
196 {
197 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
198 OMPI_FINT_2_INT(*length) * 8,
199 FPTR_2_VOID_PTR(source),
200 OMPI_FINT_2_INT(*pe), NULL));
201 }
202
203 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
204 SHMEM_PUT32_NBI,
205 shmem_put32_nbi_,
206 shmem_put32_nbi__,
207 shmem_put32_nbi_f,
208 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
209 (target,source,length,pe) )
210
shmem_put32_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)211 void shmem_put32_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
212 {
213 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
214 OMPI_FINT_2_INT(*length) * 4,
215 FPTR_2_VOID_PTR(source),
216 OMPI_FINT_2_INT(*pe), NULL));
217 }
218
219 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
220 SHMEM_PUT64_NBI,
221 shmem_put64_nbi_,
222 shmem_put64_nbi__,
223 shmem_put64_nbi_f,
224 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
225 (target,source,length,pe) )
226
shmem_put64_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)227 void shmem_put64_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
228 {
229 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
230 OMPI_FINT_2_INT(*length) * 8,
231 FPTR_2_VOID_PTR(source),
232 OMPI_FINT_2_INT(*pe), NULL));
233 }
234
235 SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
236 SHMEM_PUT128_NBI,
237 shmem_put128_nbi_,
238 shmem_put128_nbi__,
239 shmem_put128_nbi_f,
240 (FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe),
241 (target,source,length,pe) )
242
shmem_put128_nbi_f(FORTRAN_POINTER_T target,FORTRAN_POINTER_T source,MPI_Fint * length,MPI_Fint * pe)243 void shmem_put128_nbi_f(FORTRAN_POINTER_T target, FORTRAN_POINTER_T source, MPI_Fint *length, MPI_Fint *pe)
244 {
245 MCA_SPML_CALL(put_nb(FPTR_2_VOID_PTR(target),
246 OMPI_FINT_2_INT(*length) * 16,
247 FPTR_2_VOID_PTR(source),
248 OMPI_FINT_2_INT(*pe), NULL));
249 }
250