Lightweight Parallel Foundations 1.0.1-alpha 2023-06-26T11:02:34Z
A high performance and model-compliant communication layer
collectives.h
Go to the documentation of this file.
1
2/*
3 * Copyright 2021 Huawei Technologies Co., Ltd.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef _H_LPF_COLLECTIVES
19#define _H_LPF_COLLECTIVES
20
21#include <lpf/core.h>
22#include <stdbool.h>
23
24
25#ifdef __cplusplus
26#define restrict __restrict__
27extern "C" {
28#endif
29
43#define _LPF_COLLECTIVES_VERSION 201500L
44
46typedef struct lpf_coll {
49
52
55
57 void * buffer;
58
61
64
68
84typedef void (*lpf_reducer_t) (size_t n, const void * array, void * value);
85
111typedef void (*lpf_combiner_t) (size_t n, const void * combine, void * into );
112
117extern _LPFLIB_API const lpf_coll_t LPF_INVALID_COLL;
118
163extern _LPFLIB_API
165 lpf_t ctx,
166 lpf_pid_t s,
167 lpf_pid_t p,
168 size_t max_calls,
169 size_t max_elem_size,
170 size_t max_byte_size,
171 lpf_coll_t * coll
172);
173
186extern _LPFLIB_API
188
250extern _LPFLIB_API
252 lpf_t ctx,
253 lpf_pid_t s,
254 lpf_pid_t p,
255 lpf_pid_t lo,
256 lpf_pid_t hi,
257 lpf_pid_t str,
258 size_t max_calls,
259 size_t max_elem_size,
260 size_t max_byte_size,
261 lpf_coll_t * coll
262);
263
276extern _LPFLIB_API
278
361extern _LPFLIB_API
363 lpf_coll_t coll,
364 lpf_memslot_t src,
365 lpf_memslot_t dst,
366 size_t size,
367 lpf_pid_t root
368);
369
440extern _LPFLIB_API
442 lpf_coll_t coll,
443 lpf_memslot_t src,
444 lpf_memslot_t dst,
445 size_t size,
446 lpf_pid_t root
447);
448
516extern _LPFLIB_API
518 lpf_coll_t coll,
519 lpf_memslot_t src,
520 lpf_memslot_t dst,
521 size_t size,
522 lpf_pid_t root
523);
524
597extern _LPFLIB_API
599 lpf_coll_t coll,
600 lpf_memslot_t src,
601 lpf_memslot_t dst,
602 size_t size,
603 bool exclude_myself
604);
605
672extern _LPFLIB_API
674 lpf_coll_t coll,
675 lpf_memslot_t src,
676 lpf_memslot_t dst,
677 size_t size
678);
679
744extern _LPFLIB_API
746 lpf_coll_t coll,
747 void * restrict element,
748 lpf_memslot_t element_slot,
749 size_t size,
750 lpf_reducer_t reducer,
751 lpf_pid_t root
752);
753
811extern _LPFLIB_API
813 lpf_coll_t coll,
814 void * restrict element,
815 lpf_memslot_t element_slot,
816 size_t size,
817 lpf_reducer_t reducer
818);
819
889extern _LPFLIB_API
891 lpf_coll_t coll,
892 void * restrict array,
893 lpf_memslot_t slot,
894 size_t num,
895 size_t size,
896 lpf_combiner_t combiner,
897 lpf_pid_t root
898);
899
966extern _LPFLIB_API
968 lpf_coll_t coll,
969 void * restrict array,
970 lpf_memslot_t slot,
971 size_t num,
972 size_t size,
973 lpf_combiner_t combiner
974);
975
983#ifdef __cplusplus
984} //end ``extern "C"''
985#undef restrict
986#endif
987
988#endif //end ``_H_LPF_COLLECTIVES''
989
990
lpf_err_t lpf_scatter(lpf_coll_t coll, lpf_memslot_t src, lpf_memslot_t dst, size_t size, lpf_pid_t root)
lpf_err_t lpf_collectives_init(lpf_t ctx, lpf_pid_t s, lpf_pid_t p, size_t max_calls, size_t max_elem_size, size_t max_byte_size, lpf_coll_t *coll)
lpf_err_t lpf_reduce(lpf_coll_t coll, void *restrict element, lpf_memslot_t element_slot, size_t size, lpf_reducer_t reducer, lpf_pid_t root)
const lpf_coll_t LPF_INVALID_COLL
lpf_err_t lpf_alltoall(lpf_coll_t coll, lpf_memslot_t src, lpf_memslot_t dst, size_t size)
lpf_err_t lpf_allcombine(lpf_coll_t coll, void *restrict array, lpf_memslot_t slot, size_t num, size_t size, lpf_combiner_t combiner)
lpf_err_t lpf_gather(lpf_coll_t coll, lpf_memslot_t src, lpf_memslot_t dst, size_t size, lpf_pid_t root)
lpf_err_t lpf_allreduce(lpf_coll_t coll, void *restrict element, lpf_memslot_t element_slot, size_t size, lpf_reducer_t reducer)
void(* lpf_combiner_t)(size_t n, const void *combine, void *into)
Definition: collectives.h:111
lpf_err_t lpf_broadcast(lpf_coll_t coll, lpf_memslot_t src, lpf_memslot_t dst, size_t size, lpf_pid_t root)
lpf_err_t lpf_allgather(lpf_coll_t coll, lpf_memslot_t src, lpf_memslot_t dst, size_t size, bool exclude_myself)
lpf_err_t lpf_collectives_init_strided(lpf_t ctx, lpf_pid_t s, lpf_pid_t p, lpf_pid_t lo, lpf_pid_t hi, lpf_pid_t str, size_t max_calls, size_t max_elem_size, size_t max_byte_size, lpf_coll_t *coll)
lpf_err_t lpf_collectives_destroy(lpf_coll_t coll)
lpf_err_t lpf_combine(lpf_coll_t coll, void *restrict array, lpf_memslot_t slot, size_t num, size_t size, lpf_combiner_t combiner, lpf_pid_t root)
lpf_t lpf_collectives_get_context(lpf_coll_t coll)
void(* lpf_reducer_t)(size_t n, const void *array, void *value)
Definition: collectives.h:84
typedef lpf_memslot_t
Definition: core.h:1042
void * lpf_t
Definition: core.h:775
typedef lpf_pid_t
Definition: core.h:786
typedef lpf_err_t
Definition: core.h:871
Definition: collectives.h:46
lpf_pid_t * inv_translate
Definition: collectives.h:51
lpf_pid_t P
Definition: collectives.h:63
lpf_pid_t s
Definition: collectives.h:66
lpf_pid_t * translate
Definition: collectives.h:54
void * buffer
Definition: collectives.h:57
lpf_t ctx
Definition: collectives.h:48
lpf_memslot_t slot
Definition: collectives.h:60