Ensign
Low-rank framework for multi-core CPUs and GPUs
Loading...
Searching...
No Matches
kernels.hpp
Go to the documentation of this file.
1
6#include <generic/common.hpp>
7
8#ifdef __CUDA__
9
10namespace Ensign {
11
12template<class T>
13__global__ void fill_gpu(int n, T* v, T alpha);
14
15template<class T>
16__global__ void ptw_mult_scal(int n, T* A, T alpha);
17
18__global__ void ptw_mult_scal_cplx(int n, cuDoubleComplex* A, cuDoubleComplex alpha);
19
20template<class T>
21__global__ void ptw_mult_row_k(int nm, int n, T* A, T* v, T* B);
22
23__global__ void ptw_mult_row_k(int nm, int n, cuDoubleComplex* A, cuDoubleComplex* v, cuDoubleComplex* B);
24
25template<class T>
26__global__ void ptw_sum_scal(int n, T* A, T alpha);
27
28template<class T>
29__global__ void ptw_sum(int n, T* A, T* B);
30
31__global__ void dmaxpy(int n, double* a, double* x, double* y);
32
33__global__ void scale_unique(double* x, double alpha);
34
35__global__ void scale_sqrt_unique(double* x, double alpha);
36
37__global__ void ptw_div_gs(int n, double* A, double* alpha);
38
39__global__ void ptw_mult(int n, double* A, double* B, double* C);
40
41__global__ void der_fourier(int n, cuDoubleComplex* A, double ax, double bx, int nx);
42
43__global__ void ptw_mult_row_cplx_fourier(int nm, int n, int nx, cuDoubleComplex* A, double ax, double bx);
44
45__global__ void cplx_conv(int n, double* A, cuDoubleComplex* B);
46
47__device__ cuDoubleComplex expim(double z);
48
49__device__ cuDoubleComplex phi1im(double z);
50
51__device__ cuDoubleComplex phi2im(double z);
52
53__global__ void exp_euler_fourier(int nm, int n, cuDoubleComplex* A, double* dc_r, double ts, cuDoubleComplex* T, double ax, double bx);
54
55__global__ void second_ord_stage_fourier(int nm, int n, cuDoubleComplex* A, double* dc_r, double ts, cuDoubleComplex* T, cuDoubleComplex* U, double ax, double bx);
56
57__global__ void ptw_mult_cplx(int n, cuDoubleComplex* A, double alpha);
58
59__global__ void ptw_mult_scal(int n, double* A, double alpha, double* B);
60
61__global__ void expl_euler(int n, double* A, double t, double* M1, double* M2);
62
63__global__ void rk4(int n, double* A, double t, double* M1, double* M2, double* M3);
64
65__global__ void rk4_finalcomb(int n, double* A, double t, double* M1, double* M2, double* M3, double* M4, double* M5);
66
67__global__ void addsub_rhs_k(int n, double* A, double* B, double* C);
68
69__global__ void setmultadd_rk4_k(int n, double* A, double* B, double t, double* C);
70
71__global__ void finstage_rk4_k(int n, double* A, double* B, double* C, double* D, double* E, double tau);
72
73__global__ void op1_rk4_LS_k(int n, double* A, double* B, double* C, double* D, double beta);
74
75__global__ void op2_rk4_LS_k(int n, double* A, double* B, double* C, double alpha, double beta);
76
77__global__ void op_rk4_LS_k(int n, double* A, double* B, double* C, double* D, double alpha, double beta);
78
79__global__ void setmultadd_rk2_k(int n, double* A, double* B, double t);
80
81__global__ void finstage_rk2_k(int n, double* A, double* B, double tau);
82
83template<class T>
84__global__ void transpose_inplace_k(int n, T* A);
85
86__global__ void der_fourier_2d(int N, int nx, int ny, cuDoubleComplex* A, double* lims, double nxx, cuDoubleComplex* B,cuDoubleComplex* C);
87
88__global__ void ptw_mult_row_cplx_fourier_2d(int N, int nx, int ny, cuDoubleComplex* A, double* lims, double nxx, cuDoubleComplex* B, cuDoubleComplex* C); // Very similar, maybe can be put together
89
90__global__ void exact_sol_exp_2d(int N, int nx, int ny, cuDoubleComplex* A, double* dc_r, double ts, double* lims, double nxx); // Very similar, maybe can be put together
91
92__global__ void ptw_sum_complex(int n, cuDoubleComplex* A, cuDoubleComplex* B);
93
94__global__ void ptw_sum_3mat(int n, double* A, double* B, double* C);
95
96template<class T>
97__global__ void ptw_diff(int n, T* A, T* B);
98
99__global__ void exp_euler_fourier_2d(int N, int nx, int ny, cuDoubleComplex* A, double* dc_r, double ts, double* lims, cuDoubleComplex* T); // Very similar, maybe can be put together
100
101__global__ void second_ord_stage_fourier_2d(int N, int nx, int ny, cuDoubleComplex* A, double* dc_r, double ts, double* lims, cuDoubleComplex* T, cuDoubleComplex* U); // Very similar, maybe can be put together
102
103__global__ void der_fourier_3d(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* lims, double nxx, cuDoubleComplex* B, cuDoubleComplex* C, cuDoubleComplex* D);
104
105__global__ void ptw_mult_row_cplx_fourier_3d(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* lims, double nxx, cuDoubleComplex* B, cuDoubleComplex* C, cuDoubleComplex* D); // Very similar, maybe can be put together
106__global__ void fourier_direction_k(int N, int nx, int ny, int nz, cuDoubleComplex* A, cuDoubleComplex* B, double l0, double l1, double l2, double l3, double l4, double l5, double nxx, int dir);
107
108__global__ void exact_sol_exp_3d_a(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims); // Very similar, maybe can be put together
109
110__global__ void exact_sol_exp_3d_b(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims, double nxx); // Very similar, maybe can be put together
111
112__global__ void exact_sol_exp_3d_c(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims); // Very similar, maybe can be put together
113
114__global__ void exact_sol_exp_3d_d(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims, double nxx);
115
116__global__ void exp_euler_fourier_3d(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims, cuDoubleComplex* T);
117
118__global__ void second_ord_stage_fourier_3d(int N, int nx, int ny, int nz, cuDoubleComplex* A, double* dc_r, double ts, double* lims, cuDoubleComplex* T, cuDoubleComplex* U);
119
120template<class T>
121__global__ void copy_R(int m, int n, T* Q, T* R, T w);
122
123template<class T>
124__global__ void copy_R_QR(int n, int r, int m, T* Q, T* R, T w);
125
126template<class T>
127__global__ void increase_S(int n, int r, T* S, T* Sn);
128
129template<class T>
130__global__ void decrease_S(int n, int r, T* S, T* Sn);
131
132template<class T>
133__global__ void div_Q(int m, int n, T* Q, T w);
134
135template<class T>
136__global__ void diag_S(int n, T* S, T* sigma);
137} // namespace Ensign
138
139#endif
Provides shared types, platform headers, and basic definitions.
Core namespace for Ensign's numerical algorithms and data structures.
Definition common.hpp:96