Loading...
Searching...
No Matches
q3::execution::SerialExecutionPolicy Class Reference

#include <serial.hpp>

+ Inheritance diagram for q3::execution::SerialExecutionPolicy:

Public Member Functions

void add_scaled_vector (int number_of_elements, ComplexValue scaling_factor, const ComplexValue *vector_x, ComplexValue *vector_y) const override
 
void allgather_within_group (const Real *local_data, int local_count, Real *full_data, int) const override
 
ComplexValue dot_product (int number_of_elements, const ComplexValue *vector_x, const ComplexValue *vector_y) const override
 
int global_number_of_elements (int local_number_of_elements) const override
 
int group_rank_index () const override
 
int group_size () const override
 
bool is_root () const override
 
Real norm (int number_of_elements, const ComplexValue *vector_x) const override
 
int number_of_processes () const override
 
void reduce_within_group (ComplexValue *, int) const override
 
void reduce_within_group (Real *, int) const override
 
- Public Member Functions inherited from q3::execution::ExecutionPolicy
virtual ~ExecutionPolicy ()=default
 
virtual void allgather_across_bands (ComplexValue *, const int *, const int *) const
 
virtual int band_distribution_rank_index () const
 
virtual int band_distribution_size () const
 
virtual void broadcast_across_bands (ComplexValue *, int) const
 
virtual void broadcast_across_bands (int *, int) const
 Integer overload, for the counts that decide collective sizes.
 
virtual void broadcast_across_bands (Real *, int) const
 Real overload, for eigenvalues – the numbers convergence decisions are made from.
 
virtual void broadcast_from_group_root (ComplexValue *, int) const
 
virtual void broadcast_from_group_root (Real *, int) const
 
virtual void reduce_across_bands (Real *, int) const
 
virtual void reduce_group_distributed_result (ComplexValue *, int) const
 

Additional Inherited Members

- Public Types inherited from q3::execution::ExecutionPolicy
using ComplexValue = Complex
 

Detailed Description

Definition at line 22 of file serial.hpp.

Member Function Documentation

◆ add_scaled_vector()

void q3::execution::SerialExecutionPolicy::add_scaled_vector ( int  number_of_elements,
ComplexValue  scaling_factor,
const ComplexValue *  vector_x,
ComplexValue *  vector_y 
) const
inlineoverridevirtual

Scaled vector addition via BLAS zaxpy_: vector_y += scaling_factor * vector_x.

Implements q3::execution::ExecutionPolicy.

Definition at line 36 of file serial.hpp.

References q3::blas::zaxpy_().

Referenced by q3::execution::MPIExecutionPolicy::add_scaled_vector().

◆ allgather_within_group()

void q3::execution::SerialExecutionPolicy::allgather_within_group ( const Real *  local_data,
int  local_count,
Real *  full_data,
int  total_count 
) const
inlineoverridevirtual

Allgather rank-local slab data into a full-size buffer on every rank.

Gathers each group rank's contiguous local slice into a contiguous full array on every rank (concatenated in rank order). No-op when group_size == 1.

Parameters
local_dataRank-local slab data.
local_countNumber of real elements in the local slab.
full_dataOutput: full-grid data (all slabs concatenated).
total_countTotal number of real elements across all ranks.

Implements q3::execution::ExecutionPolicy.

Definition at line 76 of file serial.hpp.

◆ dot_product()

ComplexValue q3::execution::SerialExecutionPolicy::dot_product ( int  number_of_elements,
const ComplexValue *  vector_x,
const ComplexValue *  vector_y 
) const
inlineoverridevirtual

Compute the inner product x† · y using the existing q3_complex_conjugate_dot_product helper.

Implements q3::execution::ExecutionPolicy.

Definition at line 27 of file serial.hpp.

References q3::blas::q3_complex_conjugate_dot_product().

Referenced by q3::execution::MPIExecutionPolicy::dot_product().

◆ global_number_of_elements()

int q3::execution::SerialExecutionPolicy::global_number_of_elements ( int  local_number_of_elements) const
inlineoverridevirtual

Sum a rank-local element count across the process group.

Distributed vector algorithms use this to distinguish the local slab length from the dimension of the complete vector space.

Implements q3::execution::ExecutionPolicy.

Definition at line 68 of file serial.hpp.

◆ group_rank_index()

int q3::execution::SerialExecutionPolicy::group_rank_index ( ) const
inlineoverridevirtual

Index of this process within its process group.

0 in serial mode. NOT necessarily 0 when group_size() == 1: a group whose data distribution was disabled at run time (see MPIExecutionPolicy::disable_group_distribution) reports group_size() == 1 while keeping its pool-local rank index, because the pool identity is still needed. Use group_size() <= 1 to ask "is my data replicated"; use group_rank_index() == 0 only to pick one representative per pool.

Implements q3::execution::ExecutionPolicy.

Definition at line 56 of file serial.hpp.

◆ group_size()

int q3::execution::SerialExecutionPolicy::group_size ( ) const
inlineoverridevirtual

Number of processes in this process group. Always 1 in serial mode or when each group contains a single process.

Implements q3::execution::ExecutionPolicy.

Definition at line 60 of file serial.hpp.

◆ is_root()

bool q3::execution::SerialExecutionPolicy::is_root ( ) const
inlineoverridevirtual

Check if this process is the root process (rank 0 in the world communicator).

Used by entry points to ensure only one process writes output files or logs non-essential information.

Implements q3::execution::ExecutionPolicy.

Definition at line 52 of file serial.hpp.

◆ norm()

Real q3::execution::SerialExecutionPolicy::norm ( int  number_of_elements,
const ComplexValue *  vector_x 
) const
inlineoverridevirtual

Euclidean norm via BLAS dznrm2_.

Implements q3::execution::ExecutionPolicy.

Definition at line 47 of file serial.hpp.

References q3::blas::dznrm2_().

◆ number_of_processes()

int q3::execution::SerialExecutionPolicy::number_of_processes ( ) const
inlineoverridevirtual

Number of processes in the complete execution topology.

Implements q3::execution::ExecutionPolicy.

Definition at line 64 of file serial.hpp.

◆ reduce_within_group() [1/2]

void q3::execution::SerialExecutionPolicy::reduce_within_group ( ComplexValue *  data,
int  number_of_elements 
) const
inlineoverridevirtual

Allreduce an array of complex values within the process group.

Used after ZGEMM-based inner products over the distributed vector dimension (e.g., subspace matrices, orthogonalization overlaps) when coefficient vectors are distributed across group ranks. No-op when group_size == 1.

Parameters
dataIn-out array of complex values.
number_of_elementsNumber of complex elements to reduce.

Implements q3::execution::ExecutionPolicy.

Definition at line 72 of file serial.hpp.

◆ reduce_within_group() [2/2]

void q3::execution::SerialExecutionPolicy::reduce_within_group ( Real *  data,
int  number_of_elements 
) const
inlineoverridevirtual

Allreduce an array of real values within the process group.

Same as the complex variant but for real-valued arrays.

Parameters
dataIn-out array of real values.
number_of_elementsNumber of real elements to reduce.

Implements q3::execution::ExecutionPolicy.

Definition at line 74 of file serial.hpp.


The documentation for this class was generated from the following file: