17 #ifndef dealii_matrix_free_task_info_h 18 #define dealii_matrix_free_task_info_h 21 #include <deal.II/base/exceptions.h> 22 #include <deal.II/base/index_set.h> 23 #include <deal.II/base/memory_consumption.h> 24 #include <deal.II/base/tensor.h> 25 #include <deal.II/base/thread_management.h> 26 #include <deal.II/base/utilities.h> 27 #include <deal.II/base/vectorization.h> 29 #include <deal.II/lac/dynamic_sparsity_pattern.h> 32 DEAL_II_NAMESPACE_OPEN
74 cell(
const std::pair<unsigned int, unsigned int> &cell_range) = 0;
79 face(
const std::pair<unsigned int, unsigned int> &face_range) = 0;
84 boundary(
const std::pair<unsigned int, unsigned int> &face_range) = 0;
89 namespace MatrixFreeFunctions
92 template <
typename Number>
93 struct ConstraintValues;
108 enum TasksParallelScheme
139 collect_boundary_cells(
const unsigned int n_active_cells,
140 const unsigned int n_active_and_ghost_cells,
141 const unsigned int vectorization_length,
142 std::vector<unsigned int> &boundary_cells);
181 create_blocks_serial(
182 const std::vector<unsigned int> &boundary_cells,
183 const std::vector<unsigned int> &cells_close_to_boundary,
184 const unsigned int dofs_per_cell,
185 const std::vector<unsigned int> &cell_vectorization_categories,
186 const bool cell_vectorization_categories_strict,
187 std::vector<unsigned int> & renumbering,
188 std::vector<unsigned char> & incompletely_filled_vectorization);
208 initial_setup_blocks_tasks(
209 const std::vector<unsigned int> &boundary_cells,
210 std::vector<unsigned int> & renumbering,
211 std::vector<unsigned char> & incompletely_filled_vectorization);
220 guess_block_size(
const unsigned int dofs_per_cell);
254 make_thread_graph_partition_color(
256 std::vector<unsigned int> & renumbering,
257 std::vector<unsigned char> &irregular_cells,
293 make_thread_graph_partition_partition(
294 const std::vector<unsigned int> &cell_active_fe_index,
296 std::vector<unsigned int> & renumbering,
297 std::vector<unsigned char> & irregular_cells,
324 make_thread_graph(
const std::vector<unsigned int> &cell_active_fe_index,
326 std::vector<unsigned int> & renumbering,
327 std::vector<unsigned char> & irregular_cells,
335 make_connectivity_cells_to_blocks(
336 const std::vector<unsigned char> &irregular_cells,
345 make_coloring_within_partitions_pre_blocked(
347 const unsigned int partition,
348 const std::vector<unsigned int> &cell_partition,
349 const std::vector<unsigned int> &partition_list,
350 const std::vector<unsigned int> &partition_size,
351 std::vector<unsigned int> & partition_color_list);
358 make_partitioning_within_partitions_post_blocked(
360 const std::vector<unsigned int> &cell_active_fe_index,
361 const unsigned int partition,
362 const unsigned int cluster_size,
364 const std::vector<unsigned int> &cell_partition,
365 const std::vector<unsigned int> &partition_list,
366 const std::vector<unsigned int> &partition_size,
367 std::vector<unsigned int> & partition_partition_list,
368 std::vector<unsigned char> & irregular_cells);
392 const unsigned int cluster_size,
393 std::vector<unsigned int> & cell_partition,
394 std::vector<unsigned int> & partition_list,
395 std::vector<unsigned int> & partition_size,
396 unsigned int & partition)
const;
403 update_task_info(
const unsigned int partition);
415 memory_consumption()
const;
421 template <
typename StreamType>
423 print_memory_statistics(StreamType &out, std::size_t data_length)
const;
589 DEAL_II_NAMESPACE_CLOSE
std::vector< unsigned int > ghost_face_partition_data
void loop(ITERATOR begin, typename identity< ITERATOR >::type end, DOFINFO &dinfo, INFOBOX &info, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &cell_worker, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &boundary_worker, const std::function< void(DOFINFO &, DOFINFO &, typename INFOBOX::CellInfo &, typename INFOBOX::CellInfo &)> &face_worker, ASSEMBLER &assembler, const LoopControl &lctrl=LoopControl())
virtual void cell(const std::pair< unsigned int, unsigned int > &cell_range)=0
TasksParallelScheme scheme
std::vector< unsigned int > partition_row_index
std::vector< unsigned int > partition_n_workers
virtual void vector_update_ghosts_finish()=0
Finishes the communication for the update ghost values operation.
std::vector< unsigned int > cell_partition_data
std::vector< unsigned int > partition_n_blocked_workers
std::vector< unsigned int > refinement_edge_face_partition_data
unsigned int vectorization_length
unsigned int n_blocked_workers
std::vector< unsigned int > boundary_partition_data
unsigned int n_ghost_cells
virtual void zero_dst_vector_range(const unsigned int range_index)=0
virtual void boundary(const std::pair< unsigned int, unsigned int > &face_range)=0
std::vector< unsigned char > task_at_mpi_boundary
unsigned int n_active_cells
virtual void vector_update_ghosts_start()=0
Starts the communication for the update ghost values operation.
virtual void face(const std::pair< unsigned int, unsigned int > &face_range)=0
std::vector< unsigned int > face_partition_data
virtual void vector_compress_start()=0
Starts the communication for the vector compress operation.
std::vector< unsigned int > partition_odds
std::vector< unsigned int > partition_evens
virtual void vector_compress_finish()=0
Finishes the communication for the vector compress operation.