ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
para_linear_transform.h
Go to the documentation of this file.
1#ifndef __PARA_LINEAR_TRANSFORM_H__
2#define __PARA_LINEAR_TRANSFORM_H__
5
6#include <vector>
7#ifdef __MPI
8#include "mpi.h"
9#endif
10namespace hsolver
11{
12
18template <typename T, typename Device>
20{
21 public:
27 int nproc_col = 1;
28 int rank_col = 0;
29 int nrowA = 0;
30 int ncolA = 0;
31 int ncolB = 0;
32 int LDA = 0;
33 bool localU = false;
34#ifdef __MPI
35 MPI_Comm col_world = MPI_COMM_NULL;
36 std::vector<int> colA_loc;
37 std::vector<int> start_colA;
38 std::vector<int> start_colB;
39 int max_colA = 0;
40 int ncolA_glo = 0;
41 int max_colB = 0;
42#endif
43
49 void set_dimension(const int nrowA,
50 const int ncolA,
51 const int ncolB,
52 const int LDA,
53#ifdef __MPI
54 MPI_Comm col_world,
55#endif
56 const bool localU);
57
73 void act(const T alpha, const T* A, const T* U_global, const T beta, T* B);
74
75#ifdef __MPI
76 private:
77 std::vector<T> A_tmp_; // temperory memory for A
78 std::vector<T> isend_tmp_; // temperory memory for isend
79 T* U_tmp_ = nullptr; // temperory memory for U
80 T* B_tmp_ = nullptr; // temperory memory for B
81 T* A_tmp_device_ = nullptr; // temperory pointer
82#endif
83};
84} // namespace hsolver
85#endif
B = alpha * A * U + beta * B A and B are local matrice U can be a local matrix or a global matrix.
Definition para_linear_transform.h:20
int max_colB
Definition para_linear_transform.h:41
std::vector< int > start_colA
Definition para_linear_transform.h:37
bool localU
Definition para_linear_transform.h:33
std::vector< T > isend_tmp_
Definition para_linear_transform.h:78
T * A_tmp_device_
Definition para_linear_transform.h:81
MPI_Comm col_world
Definition para_linear_transform.h:35
T * B_tmp_
Definition para_linear_transform.h:80
int nproc_col
Definition para_linear_transform.h:27
int ncolA_glo
Definition para_linear_transform.h:40
int nrowA
Definition para_linear_transform.h:29
std::vector< int > colA_loc
Definition para_linear_transform.h:36
void act(const T alpha, const T *A, const T *U_global, const T beta, T *B)
Definition para_linear_transform.cpp:81
int max_colA
Definition para_linear_transform.h:39
std::vector< int > start_colB
Definition para_linear_transform.h:38
int ncolA
Definition para_linear_transform.h:30
int rank_col
Definition para_linear_transform.h:28
void set_dimension(const int nrowA, const int ncolA, const int ncolB, const int LDA, MPI_Comm col_world, const bool localU)
set the dimension of A, B, and U A: LDA * nrow, U_global: ncolA_global * ncolB_global,...
Definition para_linear_transform.cpp:22
T * U_tmp_
Definition para_linear_transform.h:79
int ncolB
Definition para_linear_transform.h:31
~PLinearTransform()
Definition para_linear_transform.cpp:13
std::vector< T > A_tmp_
Definition para_linear_transform.h:77
int LDA
Definition para_linear_transform.h:32
#define T
Definition exp.cpp:237
#define __MPI
Definition diag_comm_info.h:9
base device SOURCES math_hegvd_test cpp endif() if(ENABLE_GOOGLEBENCH) AddTest(TARGET PERF_MODULE_HSOLVER_KERNELS LIBS parameter $
Definition CMakeLists.txt:10
Definition memory_op.h:115
Definition memory_op.h:17
Definition memory_op.h:31