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

#include <init.hpp>

+ Inheritance diagram for q3::execution::PlanewaveGPUExecutionPolicy:

Public Member Functions

 PlanewaveGPUExecutionPolicy (std::shared_ptr< gpu::device::GPUDeviceBackend > device_backend, gpu::blas::GPUBLAS &gpu_blas)
 
void add_scaled_vector (int number_of_elements, ComplexValue scaling_factor, const ComplexValue *vector_x, ComplexValue *vector_y) const override
 
std::vector< Real > assemble_global_kpoint_state_data (const std::vector< Real > &local_data, int, int, int) const override
 
std::unique_ptr< FFTGrid > create_fft_grid () const override
 
ComplexValue dot_product (int number_of_elements, const ComplexValue *vector_x, const ComplexValue *vector_y) const override
 
bool each_process_owns_whole_kpoints () const override
 The single GPU process holds every k-point whole.
 
int global_kpoint_index (int local_kpoint_index) const override
 Identity: the single GPU process holds the global k-point grid in order.
 
gpu::blas::GPUBLAS & gpu_blas ()
 
const gpu::blas::GPUBLAS & gpu_blas () const
 
KPointsGrid local_kpoint_grid (const KPointsGrid &global_kpoint_grid) const override
 
Real norm (int number_of_elements, const ComplexValue *vector_x) const override
 
int number_of_pools () const override
 
bool one_process_owns_complete_state () const override
 
void reduce_band_group_scalar_min (int &) const override
 
void reduce_charge_density (std::vector< std::vector< Real > > &) const override
 
void reduce_scalar (Real &) const override
 
void reduce_scalar_max (int &) const override
 
void reduce_scalar_max (Real &) const override
 
void reduce_scalar_min (Real &) const override
 
void reduce_vector (std::vector< Real > &) const override
 
void reduce_within_pool_scalar (Real &) const override
 
void reduce_within_pool_vector (std::vector< Real > &) const override
 
- Public Member Functions inherited from q3::execution::gpu::GPUExecutionPolicy
 GPUExecutionPolicy (std::shared_ptr< device::GPUDeviceBackend > device_backend)
 
void allgather_within_group (const Real *local_data, int local_count, Real *full_data, int) const override
 
const device::GPUDeviceBackend & device_backend () const
 
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
 
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
 
- Public Member Functions inherited from q3::execution::PlanewaveExecutionPolicy
 ~PlanewaveExecutionPolicy () override=default
 
virtual void disable_band_distribution ()
 
generated::ResultsExecution execution_record () const
 
virtual bool number_of_pools_was_requested () const
 
virtual void reconfigure_topology (int)
 
- Public Member Functions inherited from q3::execution::QuantumSystemExecutionPolicy
 ~QuantumSystemExecutionPolicy () override=default
 
int band_rank_index () const
 
int band_size () const
 
- Public Member Functions inherited from q3::FFTGridFactory
virtual ~FFTGridFactory ()=default
 

Additional Inherited Members

- Public Types inherited from q3::execution::ExecutionPolicy
using ComplexValue = Complex
 
- Protected Attributes inherited from q3::execution::gpu::GPUExecutionPolicy
std::shared_ptr< device::GPUDeviceBackend > device_backend_
 

Detailed Description

Definition at line 30 of file init.hpp.

Constructor & Destructor Documentation

◆ PlanewaveGPUExecutionPolicy()

q3::execution::PlanewaveGPUExecutionPolicy::PlanewaveGPUExecutionPolicy ( std::shared_ptr< gpu::device::GPUDeviceBackend >  device_backend,
gpu::blas::GPUBLAS &  gpu_blas 
)
inline

Construct a planewave GPU execution policy.

Parameters
device_backendShared pointer to the GPU device backend.
gpu_blasReference to the GPU BLAS wrapper for vector operations. Must outlive this policy.

Definition at line 40 of file init.hpp.

Member Function Documentation

◆ add_scaled_vector()

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

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

Reimplemented from q3::execution::gpu::GPUExecutionPolicy.

Definition at line 58 of file init.hpp.

References q3::execution::gpu::blas::GPUBLAS::axpy().

◆ assemble_global_kpoint_state_data()

std::vector< Real > q3::execution::PlanewaveGPUExecutionPolicy::assemble_global_kpoint_state_data ( const std::vector< Real > &  local_data,
int  local_number_of_physical_kpoints,
int  number_of_spin_components,
int  number_of_values_per_state 
) const
inlineoverridevirtual

Assemble fixed-width data for local k-point states into global order.

Local state order is spin-major, with physical k-points ordered as they appear in local_kpoint_grid(). The returned data uses the same spin-major convention over the complete global grid. Serial policies return the input unchanged; MPI policies gather one contribution per pool.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 109 of file init.hpp.

◆ create_fft_grid()

std::unique_ptr< FFTGrid > q3::execution::PlanewaveGPUExecutionPolicy::create_fft_grid ( ) const
inlineoverridevirtual

Create a GPU FFT grid instance.

Intentionally returns nullptr: vendor GPU FFT grids (GPUFFTGrid, cuFFT/hipFFT/SYCL-backed) exist but are constructed by the GPU entry points (main_gpu*.cpp) and handed to the basis directly, not created through this policy hook. The caller must check for null and fall back to a serial FFT grid.

Implements q3::FFTGridFactory.

Definition at line 125 of file init.hpp.

◆ dot_product()

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

Compute the inner product x† · y via GPUBLAS.

Reimplemented from q3::execution::gpu::GPUExecutionPolicy.

Definition at line 49 of file init.hpp.

References q3::execution::gpu::blas::GPUBLAS::dot_product().

◆ each_process_owns_whole_kpoints()

bool q3::execution::PlanewaveGPUExecutionPolicy::each_process_owns_whole_kpoints ( ) const
inlineoverridevirtual

The single GPU process holds every k-point whole.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 81 of file init.hpp.

◆ global_kpoint_index()

int q3::execution::PlanewaveGPUExecutionPolicy::global_kpoint_index ( int  local_kpoint_index) const
inlineoverridevirtual

Identity: the single GPU process holds the global k-point grid in order.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 85 of file init.hpp.

◆ gpu_blas() [1/2]

gpu::blas::GPUBLAS & q3::execution::PlanewaveGPUExecutionPolicy::gpu_blas ( )
inline

Access the GPU BLAS wrapper.

Definition at line 132 of file init.hpp.

◆ gpu_blas() [2/2]

const gpu::blas::GPUBLAS & q3::execution::PlanewaveGPUExecutionPolicy::gpu_blas ( ) const
inline

Access the GPU BLAS wrapper (const).

Definition at line 139 of file init.hpp.

◆ local_kpoint_grid()

KPointsGrid q3::execution::PlanewaveGPUExecutionPolicy::local_kpoint_grid ( const KPointsGrid &  global_kpoint_grid) const
inlineoverridevirtual

Identity: return the global grid unchanged.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 104 of file init.hpp.

◆ norm()

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

Euclidean norm via GPUBLAS.

Reimplemented from q3::execution::gpu::GPUExecutionPolicy.

Definition at line 68 of file init.hpp.

References q3::execution::gpu::blas::GPUBLAS::norm().

◆ number_of_pools()

int q3::execution::PlanewaveGPUExecutionPolicy::number_of_pools ( ) const
inlineoverridevirtual

Number of k-point pools in the current topology.

Returns 1 in serial mode. In MPI mode returns the number of pools configured by configure_topology(). Used by the factory to validate that no pool is left empty (which would cause MPI collective mismatches).

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 74 of file init.hpp.

◆ one_process_owns_complete_state()

bool q3::execution::PlanewaveGPUExecutionPolicy::one_process_owns_complete_state ( ) const
inlineoverridevirtual

Whether one process owns every k-point and every G-vector coefficient.

Writers without a gather implementation may serialize state only when this is true. It is stronger than checking the current group size because a small-basis fallback can disable coefficient distribution without turning a multi-process FFT grid into a serial one.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 77 of file init.hpp.

◆ reduce_band_group_scalar_min()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_band_group_scalar_min ( int &  value) const
inlineoverridevirtual

Reduce an integer scalar within the band group using MPI_MIN.

Used during initialization to check if any rank in the pool received zero plane waves from slab distribution.

Parameters
valueIn-out: local value, replaced by band-group minimum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 96 of file init.hpp.

◆ reduce_charge_density()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_charge_density ( std::vector< std::vector< Real > > &  ) const
inlineoverridevirtual

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 89 of file init.hpp.

◆ reduce_scalar()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_scalar ( Real &  value) const
inlineoverridevirtual

── Across-pool reductions (inter-pool communicator) ──────────────────────

Use for k-point-local quantities that must be summed across pools. With 1-rank-per-pool these happen over MPI_COMM_WORLD; with multiple ranks per pool they use the inter-pool communicator (one rank per pool). Reduce a scalar k-point sum across all pools (MPI_SUM).

Used for band_energy and smearing_entropy after local k-point accumulation.

Parameters
valueIn-out: local k-point contribution, replaced by global sum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 91 of file init.hpp.

◆ reduce_scalar_max() [1/2]

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_scalar_max ( int &  value) const
inlineoverridevirtual

Reduce a scalar across all pools using MPI_MAX.

Used for summary statistics such as max_plane_waves_per_kpoint where each pool holds only its local k-points and the global maximum is needed.

Parameters
valueIn-out: local maximum, replaced by global maximum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 93 of file init.hpp.

◆ reduce_scalar_max() [2/2]

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_scalar_max ( Real &  value) const
inlineoverridevirtual

Reduce a Real scalar across all pools using MPI_MAX.

Used for global eigenvalue range (e.g., HOMO across pools).

Parameters
valueIn-out: local maximum, replaced by global maximum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 94 of file init.hpp.

◆ reduce_scalar_min()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_scalar_min ( Real &  value) const
inlineoverridevirtual

Reduce a Real scalar across all pools using MPI_MIN.

Used for global eigenvalue range (e.g., LUMO across pools).

Parameters
valueIn-out: local minimum, replaced by global minimum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 95 of file init.hpp.

◆ reduce_vector()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_vector ( std::vector< Real > &  values) const
inlineoverridevirtual

Reduce a vector of k-point-local values across all pools (MPI_SUM).

Used for nonlocal forces and kinetic/nonlocal stress contributions.

Parameters
valuesIn-out: local k-point contributions, replaced by global sum.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 92 of file init.hpp.

◆ reduce_within_pool_scalar()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_within_pool_scalar ( Real &  value) const
inlineoverridevirtual

── Within-pool reductions (band communicator) ────────────────────────────

Use for real-space slab integrals. With 1-rank-per-pool these are no-ops. With multiple ranks per pool, FFTW-MPI distributes the real-space grid across the band communicator; each rank integrates only its local slabs and these methods sum the partial results within the pool. Reduce a real-space slab integral scalar within this pool (MPI_SUM).

Used for XC energy, double-counting correction, and delta-eSCF correction.

Parameters
valueIn-out: partial slab integral, replaced by pool-total.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 98 of file init.hpp.

◆ reduce_within_pool_vector()

void q3::execution::PlanewaveGPUExecutionPolicy::reduce_within_pool_vector ( std::vector< Real > &  values) const
inlineoverridevirtual

Reduce a real-space slab integral vector within this pool (MPI_SUM).

Used for local forces, XC stress, local-PP stress, and core-correction forces/stress computed from real-space grid slabs.

Parameters
valuesIn-out: partial slab contributions, replaced by pool-total.

Implements q3::execution::PlanewaveExecutionPolicy.

Definition at line 99 of file init.hpp.


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