ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
B = alpha * A * U + beta * B A and B are local matrice U can be a local matrix or a global matrix. More...
#include <para_linear_transform.h>
Public Types | |
using | syncmem_dev_op = base_device::memory::synchronize_memory_op< T, Device, Device > |
using | resmem_dev_op = base_device::memory::resize_memory_op< T, Device > |
using | setmem_dev_op = base_device::memory::set_memory_op< T, Device > |
using | delmem_dev_op = base_device::memory::delete_memory_op< T, Device > |
Public Member Functions | |
~PLinearTransform () | |
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, U_local: ncolA_global * ncolB B: LDA * ncolB | |
void | act (const T alpha, const T *A, const T *U_global, const T beta, T *B) |
Public Attributes | |
int | nproc_col = 1 |
int | rank_col = 0 |
int | nrowA = 0 |
int | ncolA = 0 |
int | ncolB = 0 |
int | LDA = 0 |
bool | localU = false |
MPI_Comm | col_world = MPI_COMM_NULL |
std::vector< int > | colA_loc |
std::vector< int > | start_colA |
std::vector< int > | start_colB |
int | max_colA = 0 |
int | ncolA_glo = 0 |
int | max_colB = 0 |
Private Attributes | |
std::vector< T > | A_tmp_ |
std::vector< T > | isend_tmp_ |
T * | U_tmp_ = nullptr |
T * | B_tmp_ = nullptr |
T * | A_tmp_device_ = nullptr |
B = alpha * A * U + beta * B A and B are local matrice U can be a local matrix or a global matrix.
using hsolver::PLinearTransform< T, Device >::delmem_dev_op = base_device::memory::delete_memory_op<T, Device> |
using hsolver::PLinearTransform< T, Device >::resmem_dev_op = base_device::memory::resize_memory_op<T, Device> |
using hsolver::PLinearTransform< T, Device >::setmem_dev_op = base_device::memory::set_memory_op<T, Device> |
using hsolver::PLinearTransform< T, Device >::syncmem_dev_op = base_device::memory::synchronize_memory_op<T, Device, Device> |
hsolver::PLinearTransform< T, Device >::~PLinearTransform | ( | ) |
void hsolver::PLinearTransform< T, Device >::act | ( | const T | alpha, |
const T * | A, | ||
const T * | U_global, | ||
const T | beta, | ||
T * | B | ||
) |
void hsolver::PLinearTransform< T, Device >::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, U_local: ncolA_global * ncolB B: LDA * ncolB
|
private |
|
private |
|
private |
MPI_Comm hsolver::PLinearTransform< T, Device >::col_world = MPI_COMM_NULL |
std::vector<int> hsolver::PLinearTransform< T, Device >::colA_loc |
|
private |
int hsolver::PLinearTransform< T, Device >::LDA = 0 |
bool hsolver::PLinearTransform< T, Device >::localU = false |
int hsolver::PLinearTransform< T, Device >::max_colA = 0 |
int hsolver::PLinearTransform< T, Device >::max_colB = 0 |
int hsolver::PLinearTransform< T, Device >::ncolA = 0 |
int hsolver::PLinearTransform< T, Device >::ncolA_glo = 0 |
int hsolver::PLinearTransform< T, Device >::ncolB = 0 |
int hsolver::PLinearTransform< T, Device >::nproc_col = 1 |
int hsolver::PLinearTransform< T, Device >::nrowA = 0 |
int hsolver::PLinearTransform< T, Device >::rank_col = 0 |
std::vector<int> hsolver::PLinearTransform< T, Device >::start_colA |
std::vector<int> hsolver::PLinearTransform< T, Device >::start_colB |
|
private |