Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
memcpy_channel.h
Go to the documentation of this file.
1/*
2 * Copyright 2025 Los Alamos National Laboratory, Stanford University, NVIDIA Corporation
3 * SPDX-License-Identifier: Apache-2.0
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 MEMCPY_CHANNEL
19#define MEMCPY_CHANNEL
20
21#include <vector>
22
23#include "realm/mem_impl.h"
24#include "realm/bgwork.h"
25#include "realm/shm.h"
27
28namespace Realm {
29
30 class MemcpyChannel;
31
32 class MemcpyXferDes : public XferDes {
33 public:
34 MemcpyXferDes(uintptr_t _dma_op, Channel *_channel, NodeID _launch_node,
35 XferDesID _guid, const std::vector<XferDesPortInfo> &inputs_info,
36 const std::vector<XferDesPortInfo> &outputs_info, int _priority);
37
38 long get_requests(Request **requests, long nr);
41 void flush();
42
43 virtual bool request_available();
45 virtual void enqueue_request(Request *req);
46
48
49 private:
50 bool memcpy_req_in_use = false;
51 MemcpyRequest memcpy_req;
52 bool has_serdez = false;
53 };
54
55 class MemcpyChannel : public SingleXDQChannel<MemcpyChannel, MemcpyXferDes> {
56 public:
58 const std::unordered_map<realm_id_t, SharedMemoryInfo>
59 &remote_shared_memory_mappings);
60
61 // multiple concurrent memcpys ok
62 static const bool is_ordered = false;
63
65
66 virtual uint64_t
67 supports_path(ChannelCopyInfo channel_copy_info, CustomSerdezID src_serdez_id,
68 CustomSerdezID dst_serdez_id, ReductionOpID redop_id,
69 size_t total_bytes, const std::vector<size_t> *src_frags,
70 const std::vector<size_t> *dst_frags, XferDesKind *kind_ret = 0,
71 unsigned *bw_ret = 0, unsigned *lat_ret = 0);
72
73 virtual XferDes *create_xfer_des(uintptr_t dma_op, NodeID launch_node, XferDesID guid,
74 const std::vector<XferDesPortInfo> &inputs_info,
75 const std::vector<XferDesPortInfo> &outputs_info,
76 int priority, XferDesRedopInfo redop_info,
77 const void *fill_data, size_t fill_size,
78 size_t fill_total);
79
80 virtual long submit(Request **requests, long nr);
81
82 const Node *node = nullptr;
83 bool is_stopped = false;
84 };
85}; // namespace Realm
86
87#endif
Definition bgwork.h:36
Definition channel.h:712
Definition memcpy_channel.h:55
const Node * node
Definition memcpy_channel.h:82
MemcpyChannel(BackgroundWorkManager *_bgwork, const Node *_node, const std::unordered_map< realm_id_t, SharedMemoryInfo > &remote_shared_memory_mappings)
virtual long submit(Request **requests, long nr)
virtual XferDes * create_xfer_des(uintptr_t dma_op, NodeID launch_node, XferDesID guid, const std::vector< XferDesPortInfo > &inputs_info, const std::vector< XferDesPortInfo > &outputs_info, int priority, XferDesRedopInfo redop_info, const void *fill_data, size_t fill_size, size_t fill_total)
static const bool is_ordered
Definition memcpy_channel.h:62
virtual uint64_t supports_path(ChannelCopyInfo channel_copy_info, CustomSerdezID src_serdez_id, CustomSerdezID dst_serdez_id, ReductionOpID redop_id, size_t total_bytes, const std::vector< size_t > *src_frags, const std::vector< size_t > *dst_frags, XferDesKind *kind_ret=0, unsigned *bw_ret=0, unsigned *lat_ret=0)
bool is_stopped
Definition memcpy_channel.h:83
Definition channel.h:168
Definition memcpy_channel.h:32
virtual void enqueue_request(Request *req)
virtual Request * dequeue_request()
void notify_request_read_done(Request *req)
long get_requests(Request **requests, long nr)
void notify_request_write_done(Request *req)
MemcpyXferDes(uintptr_t _dma_op, Channel *_channel, NodeID _launch_node, XferDesID _guid, const std::vector< XferDesPortInfo > &inputs_info, const std::vector< XferDesPortInfo > &outputs_info, int _priority)
bool progress_xd(MemcpyChannel *channel, TimeLimit work_until)
virtual bool request_available()
Definition channel.h:102
Definition channel.h:1018
Definition timers.h:129
Definition channel.h:285
Channel * channel
Definition channel.h:342
Definition activemsg.h:38
int NodeID
Definition nodeset.h:40
XferDesKind
Definition channel.h:84
int CustomSerdezID
Definition custom_serdez.h:148
unsigned long long XferDesID
Definition channel.h:56
::realm_reduction_op_id_t ReductionOpID
Definition event.h:38
Definition channel.h:683
Definition runtime_impl.h:90
Definition channel.h:209