deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
task_info.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2018 - 2023 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13
14#ifndef dealii_matrix_free_task_info_h
15#define dealii_matrix_free_task_info_h
16
17
18#include <deal.II/base/config.h>
19
23#include <deal.II/base/tensor.h>
25
26
28
29
30// forward declaration
31#ifndef DOXYGEN
33#endif
34
35
36namespace internal
37{
43 {
44 public:
45 virtual ~MFWorkerInterface() = default;
46
48 virtual void
50
52 virtual void
54
56 virtual void
58
60 virtual void
62
65 virtual void
66 zero_dst_vector_range(const unsigned int range_index) = 0;
67
68 virtual void
69 cell_loop_pre_range(const unsigned int range_index) = 0;
70
71 virtual void
72 cell_loop_post_range(const unsigned int range_index) = 0;
73
76 virtual void
77 cell(const std::pair<unsigned int, unsigned int> &cell_range) = 0;
78
81 virtual void
82 cell(const unsigned int range_index) = 0;
83
86 virtual void
87 face(const unsigned int range_index) = 0;
88
91 virtual void
92 boundary(const unsigned int range_index) = 0;
93 };
94
95
96
97 namespace MatrixFreeFunctions
98 {
104 struct TaskInfo
105 {
106 // enum for choice of how to build the task graph. Odd add versions with
107 // preblocking and even versions with postblocking. partition_partition
108 // and partition_color are deprecated but kept for backward
109 // compatibility.
117
121 TaskInfo();
122
127 void
128 clear();
129
133 void
134 loop(MFWorkerInterface &worker) const;
135
140 void
141 make_boundary_cells_divisible(std::vector<unsigned int> &boundary_cells);
142
185 void
187 const std::vector<unsigned int> &cells_with_comm,
188 const unsigned int dofs_per_cell,
189 const bool categories_are_hp,
190 const std::vector<unsigned int> &cell_vectorization_categories,
191 const bool cell_vectorization_categories_strict,
192 const std::vector<unsigned int> &parent_relation,
193 std::vector<unsigned int> &renumbering,
194 std::vector<unsigned char> &incompletely_filled_vectorization);
195
213 void
215 const std::vector<unsigned int> &boundary_cells,
216 std::vector<unsigned int> &renumbering,
217 std::vector<unsigned char> &incompletely_filled_vectorization);
218
225 void
226 guess_block_size(const unsigned int dofs_per_cell);
227
254 void
256 DynamicSparsityPattern &connectivity,
257 std::vector<unsigned int> &renumbering,
258 std::vector<unsigned char> &irregular_cells,
259 const bool hp_bool);
260
293 void
295 const std::vector<unsigned int> &cell_active_fe_index,
296 DynamicSparsityPattern &connectivity,
297 std::vector<unsigned int> &renumbering,
298 std::vector<unsigned char> &irregular_cells,
299 const bool hp_bool);
300
324 void
325 make_thread_graph(const std::vector<unsigned int> &cell_active_fe_index,
326 DynamicSparsityPattern &connectivity,
327 std::vector<unsigned int> &renumbering,
328 std::vector<unsigned char> &irregular_cells,
329 const bool hp_bool);
330
335 void
337 const std::vector<unsigned char> &irregular_cells,
338 const DynamicSparsityPattern &connectivity_cells,
339 DynamicSparsityPattern &connectivity_blocks) const;
340
345 void
347 const DynamicSparsityPattern &connectivity,
348 const unsigned int partition,
349 const std::vector<unsigned int> &cell_partition,
350 const std::vector<unsigned int> &partition_list,
351 const std::vector<unsigned int> &partition_size,
352 std::vector<unsigned int> &partition_color_list);
353
358 void
360 const DynamicSparsityPattern &connectivity,
361 const std::vector<unsigned int> &cell_active_fe_index,
362 const unsigned int partition,
363 const unsigned int cluster_size,
364 const bool hp_bool,
365 const std::vector<unsigned int> &cell_partition,
366 const std::vector<unsigned int> &partition_list,
367 const std::vector<unsigned int> &partition_size,
368 std::vector<unsigned int> &partition_partition_list,
369 std::vector<unsigned char> &irregular_cells);
370
391 void
392 make_partitioning(const DynamicSparsityPattern &connectivity,
393 const unsigned int cluster_size,
394 std::vector<unsigned int> &cell_partition,
395 std::vector<unsigned int> &partition_list,
396 std::vector<unsigned int> &partition_size,
397 unsigned int &partition) const;
398
403 void
404 update_task_info(const unsigned int partition);
405
409 void
411
415 std::size_t
416 memory_consumption() const;
417
422 template <typename StreamType>
423 void
424 print_memory_statistics(StreamType &out, std::size_t data_length) const;
425
430 unsigned int n_active_cells;
431
436 unsigned int n_ghost_cells;
437
442
446 unsigned int block_size;
447
451 unsigned int n_blocks;
452
457
464 std::vector<unsigned int> partition_row_index;
465
472 std::vector<unsigned int> cell_partition_data;
473
479 std::vector<unsigned int> cell_partition_data_hp;
480
485 std::vector<unsigned int> cell_partition_data_hp_ptr;
486
494 std::vector<unsigned int> face_partition_data;
495
501 std::vector<unsigned int> face_partition_data_hp;
502
507 std::vector<unsigned int> face_partition_data_hp_ptr;
508
516 std::vector<unsigned int> boundary_partition_data;
517
523 std::vector<unsigned int> boundary_partition_data_hp;
524
529 std::vector<unsigned int> boundary_partition_data_hp_ptr;
530
539 std::vector<unsigned int> ghost_face_partition_data;
540
550 std::vector<unsigned int> refinement_edge_face_partition_data;
551
556 std::vector<unsigned int> partition_evens;
557
562 std::vector<unsigned int> partition_odds;
563
568 std::vector<unsigned int> partition_n_blocked_workers;
569
574 std::vector<unsigned int> partition_n_workers;
575
580 unsigned int evens;
581
586 unsigned int odds;
587
592 unsigned int n_blocked_workers;
593
597 unsigned int n_workers;
598
603 std::vector<unsigned char> task_at_mpi_boundary;
604
609
614
619
623 unsigned int my_pid;
624
628 unsigned int n_procs;
629 };
630
631 } // end of namespace MatrixFreeFunctions
632} // end of namespace internal
633
635
636#endif
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
virtual void face(const unsigned int range_index)=0
virtual void zero_dst_vector_range(const unsigned int range_index)=0
virtual void cell(const std::pair< unsigned int, unsigned int > &cell_range)=0
virtual void boundary(const unsigned int range_index)=0
virtual void vector_compress_start()=0
Starts the communication for the vector compress operation.
virtual void cell(const unsigned int range_index)=0
virtual void cell_loop_post_range(const unsigned int range_index)=0
virtual void vector_update_ghosts_start()=0
Starts the communication for the update ghost values operation.
virtual ~MFWorkerInterface()=default
virtual void cell_loop_pre_range(const unsigned int range_index)=0
virtual void vector_update_ghosts_finish()=0
Finishes the communication for the update ghost values operation.
virtual void vector_compress_finish()=0
Finishes the communication for the vector compress operation.
std::vector< unsigned int > face_partition_data_hp_ptr
Definition task_info.h:507
std::vector< unsigned int > boundary_partition_data_hp
Definition task_info.h:523
std::vector< unsigned int > boundary_partition_data
Definition task_info.h:516
void loop(MFWorkerInterface &worker) const
Definition task_info.cc:348
std::vector< unsigned char > task_at_mpi_boundary
Definition task_info.h:603
std::vector< unsigned int > face_partition_data_hp
Definition task_info.h:501
void make_thread_graph_partition_color(DynamicSparsityPattern &connectivity, std::vector< unsigned int > &renumbering, std::vector< unsigned char > &irregular_cells, const bool hp_bool)
std::vector< unsigned int > refinement_edge_face_partition_data
Definition task_info.h:550
std::vector< unsigned int > partition_n_workers
Definition task_info.h:574
void create_blocks_serial(const std::vector< unsigned int > &cells_with_comm, const unsigned int dofs_per_cell, const bool categories_are_hp, const std::vector< unsigned int > &cell_vectorization_categories, const bool cell_vectorization_categories_strict, const std::vector< unsigned int > &parent_relation, std::vector< unsigned int > &renumbering, std::vector< unsigned char > &incompletely_filled_vectorization)
Definition task_info.cc:792
void make_connectivity_cells_to_blocks(const std::vector< unsigned char > &irregular_cells, const DynamicSparsityPattern &connectivity_cells, DynamicSparsityPattern &connectivity_blocks) const
void make_partitioning_within_partitions_post_blocked(const DynamicSparsityPattern &connectivity, const std::vector< unsigned int > &cell_active_fe_index, const unsigned int partition, const unsigned int cluster_size, const bool hp_bool, const std::vector< unsigned int > &cell_partition, const std::vector< unsigned int > &partition_list, const std::vector< unsigned int > &partition_size, std::vector< unsigned int > &partition_partition_list, std::vector< unsigned char > &irregular_cells)
void initial_setup_blocks_tasks(const std::vector< unsigned int > &boundary_cells, std::vector< unsigned int > &renumbering, std::vector< unsigned char > &incompletely_filled_vectorization)
void print_memory_statistics(StreamType &out, std::size_t data_length) const
Definition task_info.cc:688
void make_coloring_within_partitions_pre_blocked(const DynamicSparsityPattern &connectivity, const unsigned int partition, const std::vector< unsigned int > &cell_partition, const std::vector< unsigned int > &partition_list, const std::vector< unsigned int > &partition_size, std::vector< unsigned int > &partition_color_list)
std::vector< unsigned int > partition_row_index
Definition task_info.h:464
void make_thread_graph_partition_partition(const std::vector< unsigned int > &cell_active_fe_index, DynamicSparsityPattern &connectivity, std::vector< unsigned int > &renumbering, std::vector< unsigned char > &irregular_cells, const bool hp_bool)
std::vector< unsigned int > partition_evens
Definition task_info.h:556
void make_thread_graph(const std::vector< unsigned int > &cell_active_fe_index, DynamicSparsityPattern &connectivity, std::vector< unsigned int > &renumbering, std::vector< unsigned char > &irregular_cells, const bool hp_bool)
std::vector< unsigned int > partition_n_blocked_workers
Definition task_info.h:568
std::vector< unsigned int > cell_partition_data_hp
Definition task_info.h:479
std::vector< unsigned int > cell_partition_data_hp_ptr
Definition task_info.h:485
std::vector< unsigned int > cell_partition_data
Definition task_info.h:472
void make_partitioning(const DynamicSparsityPattern &connectivity, const unsigned int cluster_size, std::vector< unsigned int > &cell_partition, std::vector< unsigned int > &partition_list, std::vector< unsigned int > &partition_size, unsigned int &partition) const
void update_task_info(const unsigned int partition)
void make_boundary_cells_divisible(std::vector< unsigned int > &boundary_cells)
Definition task_info.cc:720
std::vector< unsigned int > ghost_face_partition_data
Definition task_info.h:539
void guess_block_size(const unsigned int dofs_per_cell)
std::vector< unsigned int > boundary_partition_data_hp_ptr
Definition task_info.h:529
std::vector< unsigned int > partition_odds
Definition task_info.h:562
std::vector< unsigned int > face_partition_data
Definition task_info.h:494