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__
7
8#include <vector>
9#ifdef __MPI
10#include "mpi.h"
11#endif
12namespace hsolver
13{
14
20template <typename T, typename Device>
22{
23 public:
29 int nproc_col = 1;
30 int rank_col = 0;
31 int nrowA = 0;
32 int ncolA = 0;
33 int ncolB = 0;
34 int LDA = 0;
35 bool localU = false;
36#ifdef __MPI
37 MPI_Comm col_world = MPI_COMM_NULL;
38 std::vector<int> colA_loc;
39 std::vector<int> start_colA;
40 std::vector<int> start_colB;
41 int max_colA = 0;
42 int ncolA_glo = 0;
43 int max_colB = 0;
44#endif
45
51 void set_dimension(const int nrowA,
52 const int ncolA,
53 const int ncolB,
54 const int LDA,
55#ifdef __MPI
56 MPI_Comm col_world,
57#endif
58 const bool localU);
59
75 void act(const T alpha, const T* A, const T* U_global, const T beta, T* B);
76
77#ifdef __MPI
78 private:
79 std::vector<T> A_tmp_; // temperory memory for A
80 std::vector<T> isend_tmp_; // temperory memory for isend
81 T* U_tmp_ = nullptr; // temperory memory for U
82 T* B_tmp_ = nullptr; // temperory memory for B
83 T* A_tmp_device_ = nullptr; // temperory pointer
84#endif
85};
86} // namespace hsolver
87#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:22
int max_colB
Definition para_linear_transform.h:43
std::vector< int > start_colA
Definition para_linear_transform.h:39
bool localU
Definition para_linear_transform.h:35
std::vector< T > isend_tmp_
Definition para_linear_transform.h:80
T * A_tmp_device_
Definition para_linear_transform.h:83
MPI_Comm col_world
Definition para_linear_transform.h:37
T * B_tmp_
Definition para_linear_transform.h:82
int nproc_col
Definition para_linear_transform.h:29
int ncolA_glo
Definition para_linear_transform.h:42
int nrowA
Definition para_linear_transform.h:31
std::vector< int > colA_loc
Definition para_linear_transform.h:38
void act(const T alpha, const T *A, const T *U_global, const T beta, T *B)
Definition para_linear_transform.cpp:78
int max_colA
Definition para_linear_transform.h:41
std::vector< int > start_colB
Definition para_linear_transform.h:40
int ncolA
Definition para_linear_transform.h:32
int rank_col
Definition para_linear_transform.h:30
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:19
T * U_tmp_
Definition para_linear_transform.h:81
int ncolB
Definition para_linear_transform.h:33
~PLinearTransform()
Definition para_linear_transform.cpp:10
std::vector< T > A_tmp_
Definition para_linear_transform.h:79
int LDA
Definition para_linear_transform.h:34
#define T
Definition exp.cpp:237
#define __MPI
Definition diag_comm_info.h:9
base device SOURCES math_dngvd_test cpp endif() if(ENABLE_GOOGLEBENCH) AddTest(TARGET PERF_MODULE_HSOLVER_KERNELS LIBS parameter $
Definition CMakeLists.txt:10
Definition memory_op.h:77
Definition memory_op.h:17
Definition memory_op.h:31