39 MPI_Comm_size( comm, &
n_ranks );
40 MPI_Comm_rank( comm, &
my_rank );
74 MPI_Comm get_comm()
const{
88 for(
int itask=0; itask<ntasks; itask++){
89 int assigned_rank = itask%
n_ranks;
91 int i_local_task = itask/
n_ranks;
92 func(itask, i_local_task);
106 void communicate(
int ntasks, F func)
const{
107 for(
int itask=0; itask<ntasks; itask++){
108 int i_local_task = itask/
n_ranks;
109 int assigned_rank = itask%
n_ranks;
110 bool is_assigned_rank = (
my_rank==assigned_rank);
111 func(itask, i_local_task, assigned_rank, is_assigned_rank, comm);
A class that manages the distribution and execution of tasks in parallel using the MPI library....
Definition: task_group.hpp:14
int my_rank
The rank of the current process within the MPI communicator.
Definition: task_group.hpp:18
int get_my_rank() const
Get the rank of the current process within the MPI communicator.
Definition: task_group.hpp:49
TaskGroup()
Default constructor for the TaskGroup class.
Definition: task_group.hpp:26
void execute_task(int ntasks, F func) const
Execute the given task function for each assigned task.
Definition: task_group.hpp:87
int get_max_n_local_tasks(int n_tasks) const
Calculate the maximum number of tasks assigned to any process.
Definition: task_group.hpp:69
int get_n_local_tasks(int n_tasks) const
Calculate the number of tasks assigned to the current process.
Definition: task_group.hpp:59
int n_ranks
The total number of processes within the MPI communicator.
Definition: task_group.hpp:19