8.0
general documentation
Loading...
Searching...
No Matches
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
53
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
73
74/* Opaque all-to-all distribution structure */
75
76#if defined(HAVE_MPI)
77
78typedef 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
125cs_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
157 int flags,
158 const cs_gnum_t *src_gnum,
160 MPI_Comm comm);
161
162/*----------------------------------------------------------------------------*/
168/*----------------------------------------------------------------------------*/
169
170void
172
173/*----------------------------------------------------------------------------*/
183/*----------------------------------------------------------------------------*/
184
185void
187 int **dest_rank);
188
189/*----------------------------------------------------------------------------*/
200/*----------------------------------------------------------------------------*/
201
202void
204 cs_lnum_t **dest_id);
205
206/*----------------------------------------------------------------------------*/
219/*----------------------------------------------------------------------------*/
220
223
224/*----------------------------------------------------------------------------*/
251/*----------------------------------------------------------------------------*/
252
253void *
255 cs_datatype_t datatype,
256 int stride,
257 bool reverse,
258 const void *src_data,
259 void *dest_data);
260
261/*----------------------------------------------------------------------------*/
285/*----------------------------------------------------------------------------*/
286
287cs_lnum_t *
289 bool reverse,
290 const cs_lnum_t *src_index,
291 cs_lnum_t *dest_index);
292
293/*----------------------------------------------------------------------------*/
321/*----------------------------------------------------------------------------*/
322
323void *
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
357int *
359
360#endif /* defined(HAVE_MPI) */
361
362/*----------------------------------------------------------------------------*/
368/*----------------------------------------------------------------------------*/
369
372
373/*----------------------------------------------------------------------------*/
379/*----------------------------------------------------------------------------*/
380
381void
383
384/*----------------------------------------------------------------------------*/
390/*----------------------------------------------------------------------------*/
391
392void
394
395/*----------------------------------------------------------------------------*/
401/*----------------------------------------------------------------------------*/
402
403void
405
406/*----------------------------------------------------------------------------*/
411/*----------------------------------------------------------------------------*/
412
413void
415
416/*----------------------------------------------------------------------------*/
417
419
420#endif /* __CS_ALL_TO_ALL_H__ */
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
struct _cs_all_to_all_t cs_all_to_all_t
Definition cs_all_to_all.h:78
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_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
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
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
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
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
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
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:509
#define END_C_DECLS
Definition cs_defs.h:510
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