Skip to content

Commit db71b5c

Browse files
GagaLPPeterTh
authored andcommitted
Change command_graph_generator::assigned_chunk to work on box instead of chunk
1 parent 37ed75d commit db71b5c

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

include/command_graph_generator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class command_graph_generator {
217217

218218
struct assigned_chunk {
219219
node_id executed_on = -1;
220-
chunk<3> chnk;
220+
box<3> chnk;
221221
};
222222

223223
struct buffer_requirements {
@@ -239,7 +239,7 @@ class command_graph_generator {
239239

240240
std::vector<assigned_chunk> split_task_and_assign_chunks(const task& tsk) const;
241241

242-
buffer_requirements_list get_buffer_requirements_for_mapped_access(const task& tsk, const subrange<3>& sr) const;
242+
buffer_requirements_list get_buffer_requirements_for_mapped_access(const task& tsk, const box<3>& box) const;
243243

244244
assigned_chunks_with_requirements compute_per_chunk_requirements(const task& tsk, const std::vector<assigned_chunk>& chunks) const;
245245

src/command_graph_generator.cc

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,16 @@ std::vector<command_graph_generator::assigned_chunk> command_graph_generator::sp
171171
std::vector<assigned_chunk> assigned_chunks;
172172
for(size_t i = 0; i < chunks.size(); ++i) {
173173
const node_id nid = (i / chunks_per_node) % m_num_nodes;
174-
assigned_chunks.push_back({nid, chunk<3>(chunks[i].get_min(), chunks[i].get_range(), tsk.get_global_size())});
174+
assigned_chunks.push_back({nid, chunks[i]});
175175
}
176176
return assigned_chunks;
177177
}
178178

179-
command_graph_generator::buffer_requirements_list command_graph_generator::get_buffer_requirements_for_mapped_access(
180-
const task& tsk, const subrange<3>& sr) const {
179+
command_graph_generator::buffer_requirements_list command_graph_generator::get_buffer_requirements_for_mapped_access(const task& tsk, const box<3>& box) const {
181180
buffer_requirements_list result;
182181
const auto& access_map = tsk.get_buffer_access_map();
183182
for(const buffer_id bid : access_map.get_accessed_buffers()) {
184-
result.push_back(buffer_requirements{bid, access_map.compute_consumed_region(bid, box<3>(sr)), access_map.compute_produced_region(bid, box<3>(sr))});
183+
result.push_back(buffer_requirements{bid, access_map.compute_consumed_region(bid, box), access_map.compute_produced_region(bid, box)});
185184
}
186185
return result;
187186
}
@@ -283,7 +282,7 @@ void command_graph_generator::resolve_pending_reductions(
283282
// as oversubscription is handled by the instruction graph).
284283
// NOTE: The participating_nodes.count() check below relies on this being true
285284
assert(chunks_with_requirements.local_chunks.size() <= 1);
286-
for(const auto& [a_chunk, requirements] : chunks_with_requirements.local_chunks) {
285+
for(const auto& [_, requirements] : chunks_with_requirements.local_chunks) {
287286
if(std::none_of(requirements.begin(), requirements.end(), [&](const buffer_requirements& br) { return br.bid == bid && !br.consumed.empty(); })) {
288287
// This chunk doesn't read from the buffer
289288
continue;
@@ -390,7 +389,7 @@ void command_graph_generator::generate_pushes(batch& current_batch, const task&
390389

391390
// TODO: We currently generate an await push command for each local chunk, whereas we only generate a single push command for all remote chunks
392391
void command_graph_generator::generate_await_pushes(batch& current_batch, const task& tsk, const assigned_chunks_with_requirements& chunks_with_requirements) {
393-
for(auto& [a_chunk, requirements] : chunks_with_requirements.local_chunks) {
392+
for(auto& [_, requirements] : chunks_with_requirements.local_chunks) {
394393
for(auto& [bid, consumed, _] : requirements) {
395394
if(consumed.empty()) continue;
396395
auto& buffer = m_buffers.at(bid);
@@ -462,7 +461,7 @@ void command_graph_generator::generate_distributed_commands(batch& current_batch
462461
if(m_policy.overlapping_write_error != error_policy::ignore) {
463462
box_vector<3> local_chunks;
464463
for(const auto& [a_chunk, _] : chunks_with_requirements.local_chunks) {
465-
local_chunks.push_back(box<3>{a_chunk.chnk});
464+
local_chunks.push_back(a_chunk.chnk);
466465
}
467466
report_overlapping_writes(tsk, local_chunks);
468467
}
@@ -488,7 +487,7 @@ void command_graph_generator::generate_distributed_commands(batch& current_batch
488487
// we have to include it in exactly one of the per-node intermediate reductions.
489488
const bool is_reduction_initializer = std::any_of(tsk.get_reductions().begin(), tsk.get_reductions().end(),
490489
[&](const auto& reduction) { return m_local_nid == reduction_initializer_nid && reduction.init_from_buffer; });
491-
cmd = create_command<execution_command>(current_batch, &tsk, subrange{a_chunk.chnk}, is_reduction_initializer,
490+
cmd = create_command<execution_command>(current_batch, &tsk, a_chunk.chnk.get_subrange(), is_reduction_initializer,
492491
[&](const auto& record_debug_info) { record_debug_info(tsk, [this](const buffer_id bid) { return m_buffers.at(bid).debug_name; }); });
493492
}
494493

@@ -539,8 +538,7 @@ void command_graph_generator::generate_distributed_commands(batch& current_batch
539538
if(const auto uninitialized_reads = region_difference(consumed, buffer.initialized_region); !uninitialized_reads.empty()) {
540539
utils::report_error(m_policy.uninitialized_read_error,
541540
"Command C{} on N{}, which executes {} of {}, reads {} {}, which has not been written by any node.", cmd->get_id(), m_local_nid,
542-
box(subrange(a_chunk.chnk.offset, a_chunk.chnk.range)), print_task_debug_label(tsk), print_buffer_debug_label(bid),
543-
uninitialized_reads);
541+
a_chunk.chnk, print_task_debug_label(tsk), print_buffer_debug_label(bid), uninitialized_reads);
544542
}
545543
}
546544
}

0 commit comments

Comments
 (0)