8.1
general documentation
cs_all_to_all.h
Go to the documentation of this file.
1 #ifndef __CS_ALL_TO_ALL_H__
2 #define __CS_ALL_TO_ALL_H__
3 
4 /*============================================================================
5  * All-to-all parallel data exchange.
6  *============================================================================*/
7 
8 /*
9  This file is part of code_saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2023 EDF S.A.
12 
13  This program is free software; you can redistribute it and/or modify it under
14  the terms of the GNU General Public License as published by the Free Software
15  Foundation; either version 2 of the License, or (at your option) any later
16  version.
17 
18  This program is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21  details.
22 
23  You should have received a copy of the GNU General Public License along with
24  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25  Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 */
27 
28 /*----------------------------------------------------------------------------*/
29 
30 #if defined(HAVE_MPI)
31 #include <mpi.h>
32 #endif
33 
34 /*----------------------------------------------------------------------------
35  * Local headers
36  *----------------------------------------------------------------------------*/
37 
38 #include "cs_defs.h"
39 #include "cs_block_dist.h"
40 #include "cs_rank_neighbors.h"
41 
42 /*----------------------------------------------------------------------------*/
43 
45 
46 /*=============================================================================
47  * Macro definitions
48  *============================================================================*/
49 
54 #define CS_ALL_TO_ALL_USE_DEST_ID (1 << 0)
55 #define CS_ALL_TO_ALL_ORDER_BY_SRC_RANK (1 << 1)
56 
57 #define CS_ALL_TO_ALL_NO_REVERSE (1 << 2)
58 #define CS_ALL_TO_ALL_NEED_SRC_RANK (1 << 3)
59 
60 /*============================================================================
61  * Type definitions
62  *============================================================================*/
63 
64 /* All-to-all algorithm choice */
65 
66 typedef enum {
67 
71 
73 
74 /* Opaque all-to-all distribution structure */
75 
76 #if defined(HAVE_MPI)
77 
78 typedef struct _cs_all_to_all_t cs_all_to_all_t;
79 
80 #endif
81 
82 /*=============================================================================
83  * Public function prototypes
84  *============================================================================*/
85 
86 #if defined(HAVE_MPI)
87 
88 /*----------------------------------------------------------------------------*/
122 /*----------------------------------------------------------------------------*/
123 
125 cs_all_to_all_create(size_t n_elts,
126  int flags,
127  const cs_lnum_t *dest_id,
128  const int dest_rank[],
129  MPI_Comm comm);
130 
131 /*----------------------------------------------------------------------------*/
153 /*----------------------------------------------------------------------------*/
154 
156 cs_all_to_all_create_from_block(size_t n_elts,
157  int flags,
158  const cs_gnum_t *src_gnum,
160  MPI_Comm comm);
161 
162 /*----------------------------------------------------------------------------*/
168 /*----------------------------------------------------------------------------*/
169 
170 void
172 
173 /*----------------------------------------------------------------------------*/
183 /*----------------------------------------------------------------------------*/
184 
185 void
187  int **dest_rank);
188 
189 /*----------------------------------------------------------------------------*/
200 /*----------------------------------------------------------------------------*/
201 
202 void
204  cs_lnum_t **dest_id);
205 
206 /*----------------------------------------------------------------------------*/
219 /*----------------------------------------------------------------------------*/
220 
221 cs_lnum_t
223 
224 /*----------------------------------------------------------------------------*/
251 /*----------------------------------------------------------------------------*/
252 
253 void *
255  cs_datatype_t datatype,
256  int stride,
257  bool reverse,
258  const void *src_data,
259  void *dest_data);
260 
261 /*----------------------------------------------------------------------------*/
285 /*----------------------------------------------------------------------------*/
286 
287 cs_lnum_t *
289  bool reverse,
290  const cs_lnum_t *src_index,
291  cs_lnum_t *dest_index);
292 
293 /*----------------------------------------------------------------------------*/
321 /*----------------------------------------------------------------------------*/
322 
323 void *
325  cs_datatype_t datatype,
326  bool reverse,
327  const cs_lnum_t *src_index,
328  const void *src_data,
329  const cs_lnum_t *dest_index,
330  void *dest_data);
331 
332 /*----------------------------------------------------------------------------*/
355 /*----------------------------------------------------------------------------*/
356 
357 int *
359 
360 #endif /* defined(HAVE_MPI) */
361 
362 /*----------------------------------------------------------------------------*/
368 /*----------------------------------------------------------------------------*/
369 
372 
373 /*----------------------------------------------------------------------------*/
379 /*----------------------------------------------------------------------------*/
380 
381 void
383 
384 /*----------------------------------------------------------------------------*/
390 /*----------------------------------------------------------------------------*/
391 
392 void
394 
395 /*----------------------------------------------------------------------------*/
401 /*----------------------------------------------------------------------------*/
402 
403 void
405 
406 /*----------------------------------------------------------------------------*/
411 /*----------------------------------------------------------------------------*/
412 
413 void
415 
416 /*----------------------------------------------------------------------------*/
417 
419 
420 #endif /* __CS_ALL_TO_ALL_H__ */
cs_all_to_all_t * cs_all_to_all_create_from_block(size_t n_elts, int flags, const cs_gnum_t *src_gnum, cs_block_dist_info_t bi, MPI_Comm comm)
Create an all-to-all distributor for elements whose destination rank is determined from global number...
Definition: cs_all_to_all.c:2441
int * cs_all_to_all_get_src_rank(cs_all_to_all_t *d)
Get array of source element ranks associated with an all-to-all distributor.
Definition: cs_all_to_all.c:3439
void * cs_all_to_all_copy_indexed(cs_all_to_all_t *d, cs_datatype_t datatype, bool reverse, const cs_lnum_t *src_index, const void *src_data, const cs_lnum_t *dest_index, void *dest_data)
Communicate local index using all-to-all distributor.
Definition: cs_all_to_all.c:3166
void * cs_all_to_all_copy_array(cs_all_to_all_t *d, cs_datatype_t datatype, int stride, bool reverse, const void *src_data, void *dest_data)
Communicate array data using all-to-all distributor.
Definition: cs_all_to_all.c:2793
void cs_all_to_all_set_type(cs_all_to_all_type_t t)
Set current type of all-to-all distributor algorithm choice.
Definition: cs_all_to_all.c:3553
void cs_all_to_all_destroy(cs_all_to_all_t **d)
Destroy an all-to-all distributor.
Definition: cs_all_to_all.c:2516
cs_lnum_t cs_all_to_all_n_elts_dest(cs_all_to_all_t *d)
Get number of elements associated with all-to-all distributor.
Definition: cs_all_to_all.c:2629
struct _cs_all_to_all_t cs_all_to_all_t
Definition: cs_all_to_all.h:78
cs_all_to_all_t * cs_all_to_all_create(size_t n_elts, int flags, const cs_lnum_t *dest_id, const int dest_rank[], MPI_Comm comm)
Create an all-to-all distributor based on destination rank.
Definition: cs_all_to_all.c:2383
cs_all_to_all_type_t cs_all_to_all_get_type(void)
Get current type of all-to-all distributor algorithm choice.
Definition: cs_all_to_all.c:3510
void cs_all_to_all_log_finalize(void)
Log performance information relative to instrumented all-to-all distribution.
Definition: cs_all_to_all.c:3566
cs_lnum_t * cs_all_to_all_copy_index(cs_all_to_all_t *d, bool reverse, const cs_lnum_t *src_index, cs_lnum_t *dest_index)
Communicate local index using all-to-all distributor.
Definition: cs_all_to_all.c:3065
cs_all_to_all_type_t
Definition: cs_all_to_all.h:66
@ CS_ALL_TO_ALL_MPI_DEFAULT
Definition: cs_all_to_all.h:68
@ CS_ALL_TO_ALL_HYBRID
Definition: cs_all_to_all.h:69
@ CS_ALL_TO_ALL_CRYSTAL_ROUTER
Definition: cs_all_to_all.h:70
void cs_all_to_all_set_hybrid_parameters(cs_rank_neighbors_exchange_t rne_type)
Set current type of all-to-all distributor algorithm choice.
Definition: cs_all_to_all.c:3539
void cs_all_to_all_get_hybrid_parameters(cs_rank_neighbors_exchange_t *rne_type)
Get current type of hybrid all-to-all distributor parameters.
Definition: cs_all_to_all.c:3524
void cs_all_to_all_transfer_dest_id(cs_all_to_all_t *d, cs_lnum_t **dest_id)
Transfer ownership of destination ids to an all-to-all distributor.
Definition: cs_all_to_all.c:2596
void cs_all_to_all_transfer_dest_rank(cs_all_to_all_t *d, int **dest_rank)
Transfer ownership of destination rank to an all-to-all distributor.
Definition: cs_all_to_all.c:2565
cs_datatype_t
Definition: cs_defs.h:272
#define BEGIN_C_DECLS
Definition: cs_defs.h:514
unsigned long cs_gnum_t
global mesh entity number
Definition: cs_defs.h:298
#define END_C_DECLS
Definition: cs_defs.h:515
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:313
@ t
Definition: cs_field_pointer.h:92
cs_rank_neighbors_exchange_t
Definition: cs_rank_neighbors.h:55
Definition: cs_block_dist.h:50