Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
sparse_exchange.hpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
10#pragma once
11
20#include <optional>
21#include <vector>
22
23namespace shamalgs::collective {
24
26 size_t buf_id;
27 size_t data_offset;
28
29 friend bool operator==(const CommMessageBufOffset &a, const CommMessageBufOffset &b) {
30 return a.buf_id == b.buf_id && a.data_offset == b.data_offset;
31 }
32 friend bool operator!=(const CommMessageBufOffset &a, const CommMessageBufOffset &b) {
33 return !(a == b);
34 }
35 };
36
38 size_t message_size;
41 std::optional<i32> message_tag;
42
43 std::optional<CommMessageBufOffset>
45 std::optional<CommMessageBufOffset>
47 };
48
49 struct CommTable {
50 std::vector<CommMessageInfo> messages_send;
51 std::vector<CommMessageInfo> message_all;
52 std::vector<CommMessageInfo> messages_recv;
53 std::vector<size_t> send_message_global_ids;
54 std::vector<size_t> recv_message_global_ids;
55
56 std::vector<size_t> send_total_sizes;
57 std::vector<size_t> recv_total_sizes;
58 };
59
60 CommTable build_sparse_exchange_table(
61 const std::vector<CommMessageInfo> &messages_send, size_t max_alloc_size);
62
63 template<sham::USMKindTarget target>
64 void sparse_exchange(
65 std::shared_ptr<sham::DeviceScheduler> dev_sched,
66 std::vector<std::unique_ptr<sham::DeviceBuffer<u8, target>>> &bytebuffer_send,
67 std::vector<std::unique_ptr<sham::DeviceBuffer<u8, target>>> &bytebuffer_recv,
68 const CommTable &comm_table);
69
70} // namespace shamalgs::collective
std::int32_t i32
32 bit integer
A buffer allocated in USM (Unified Shared Memory)
std::optional< i32 > message_tag
Tag of the MPI message.
std::optional< CommMessageBufOffset > message_bytebuf_offset_recv
Offset of the MPI message in the recv buffer.
std::optional< CommMessageBufOffset > message_bytebuf_offset_send
Offset of the MPI message in the send buffer.
size_t message_size
Size of the MPI message.
std::vector< CommMessageInfo > messages_recv
Messages to recv.
std::vector< size_t > recv_total_sizes
Total size of the recv buffer.
std::vector< size_t > send_total_sizes
Total size of the send buffer.
std::vector< size_t > send_message_global_ids
ids of messages_send in message_all
std::vector< CommMessageInfo > message_all
All messages = (allgatherv of messages_send)
std::vector< CommMessageInfo > messages_send
Messages to send.
std::vector< size_t > recv_message_global_ids
ids of messages_recv in message_all