Loading...
Searching...
No Matches
gpu_kernels.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * GPU kernels for Phase 5b: Scatter, gather, kinetic energy, potential multiply,
5 * residual computation, and preconditioning.
6 *
7 * Declares the vendor-neutral kernel launch functions, which are specialized
8 * in side-by-side backend-specific source files (CUDA, HIP, SYCL, Serial).
9 */
10
11#include <complex>
12#include <vector>
13
15
16namespace q3 {
17namespace diagonalizer {
18namespace planewave {
19namespace gpu {
20
21void launch_apply_kinetic_energy(int number_of_vectors,
22 int number_of_plane_waves,
23 const double* kinetic_energy,
24 const std::complex<double>* psi,
25 std::complex<double>* hpsi);
26
27void launch_apply_kinetic_energy_single(int number_of_vectors,
28 int number_of_plane_waves,
29 const float* kinetic_energy,
30 const std::complex<float>* psi,
31 std::complex<float>* hpsi);
32
33void launch_scatter_g_to_fft_grid(int number_of_vectors,
34 int number_of_plane_waves,
35 int local_smooth_grid_points,
36 const int* g_to_fft_mapping,
37 const int* minus_g_to_fft_mapping,
38 bool is_gamma_only,
39 const std::complex<double>* psi,
40 std::complex<double>* fft_workspace);
41
42void launch_scatter_g_to_fft_grid_single(int number_of_vectors,
43 int number_of_plane_waves,
44 int local_smooth_grid_points,
45 const int* g_to_fft_mapping,
46 const int* minus_g_to_fft_mapping,
47 bool is_gamma_only,
48 const std::complex<float>* psi,
49 std::complex<float>* fft_workspace);
50
51void launch_scatter_g_to_fft_grid_mixed(int number_of_vectors,
52 int number_of_plane_waves,
53 int local_smooth_grid_points,
54 const int* g_to_fft_mapping,
55 const int* minus_g_to_fft_mapping,
56 bool is_gamma_only,
57 const std::complex<double>* psi,
58 std::complex<float>* fft_workspace);
59
60void launch_multiply_potential(int number_of_vectors,
61 int local_smooth_grid_points,
62 const double* potential,
63 std::complex<double>* fft_workspace);
64
65void launch_multiply_potential_single(int number_of_vectors,
66 int local_smooth_grid_points,
67 const float* potential,
68 std::complex<float>* fft_workspace);
69
70void launch_gather_fft_grid_to_g(int number_of_vectors,
71 int number_of_plane_waves,
72 int local_smooth_grid_points,
73 const int* g_to_fft_mapping,
74 const std::complex<double>* fft_workspace,
75 std::complex<double>* hpsi);
76
77void launch_gather_fft_grid_to_g_single(int number_of_vectors,
78 int number_of_plane_waves,
79 int local_smooth_grid_points,
80 const int* g_to_fft_mapping,
81 const std::complex<float>* fft_workspace,
82 std::complex<float>* hpsi);
83
84void launch_gather_fft_grid_to_g_mixed(int number_of_vectors,
85 int number_of_plane_waves,
86 int local_smooth_grid_points,
87 const int* g_to_fft_mapping,
88 const std::complex<float>* fft_workspace,
89 std::complex<double>* hpsi);
90
91void launch_compute_residuals(int number_of_bands,
92 int number_of_plane_waves,
93 const double* eigenvalues,
94 const std::complex<double>* hamiltonian_ritz_vectors,
95 const std::complex<double>* overlap_ritz_vectors,
96 std::complex<double>* residual_wavefunctions);
97
98void launch_apply_preconditioner(int number_of_bands,
99 int number_of_plane_waves,
100 const double* kinetic_energy_squared,
101 const double* eigenvalues,
102 const bool* band_converged,
103 double floor_value,
104 std::complex<double>* residual_wavefunctions);
105
106} // namespace gpu
107} // namespace planewave
108} // namespace diagonalizer
109} // namespace q3
void launch_apply_preconditioner(int number_of_bands, int number_of_plane_waves, const double *kinetic_energy_squared, const double *eigenvalues, const bool *band_converged, double floor_value, std::complex< double > *residual_wavefunctions)
void launch_apply_kinetic_energy_single(int number_of_vectors, int number_of_plane_waves, const float *kinetic_energy, const std::complex< float > *psi, std::complex< float > *hpsi)
void launch_gather_fft_grid_to_g_single(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const std::complex< float > *fft_workspace, std::complex< float > *hpsi)
void launch_apply_kinetic_energy(int number_of_vectors, int number_of_plane_waves, const double *kinetic_energy, const std::complex< double > *psi, std::complex< double > *hpsi)
void launch_multiply_potential(int number_of_vectors, int local_smooth_grid_points, const double *potential, std::complex< double > *fft_workspace)
void launch_multiply_potential_single(int number_of_vectors, int local_smooth_grid_points, const float *potential, std::complex< float > *fft_workspace)
void launch_gather_fft_grid_to_g_mixed(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const std::complex< float > *fft_workspace, std::complex< double > *hpsi)
void launch_scatter_g_to_fft_grid(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const int *minus_g_to_fft_mapping, bool is_gamma_only, const std::complex< double > *psi, std::complex< double > *fft_workspace)
void launch_gather_fft_grid_to_g(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const std::complex< double > *fft_workspace, std::complex< double > *hpsi)
void launch_compute_residuals(int number_of_bands, int number_of_plane_waves, const double *eigenvalues, const std::complex< double > *hamiltonian_ritz_vectors, const std::complex< double > *overlap_ritz_vectors, std::complex< double > *residual_wavefunctions)
void launch_scatter_g_to_fft_grid_mixed(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const int *minus_g_to_fft_mapping, bool is_gamma_only, const std::complex< double > *psi, std::complex< float > *fft_workspace)
void launch_scatter_g_to_fft_grid_single(int number_of_vectors, int number_of_plane_waves, int local_smooth_grid_points, const int *g_to_fft_mapping, const int *minus_g_to_fft_mapping, bool is_gamma_only, const std::complex< float > *psi, std::complex< float > *fft_workspace)