planc
Parallel Lowrank Approximation with Non-negativity Constraints
distntfcpals.hpp
Go to the documentation of this file.
1 /* Copyright Ramakrishnan Kannan 2018 */
2 
3 #ifndef DISTNTF_DISTNTFCPALS_HPP_
4 #define DISTNTF_DISTNTFCPALS_HPP_
5 
6 #include "distntf/distauntf.hpp"
7 
8 namespace planc {
9 
10 class DistNTFCPALS : public DistAUNTF {
11  protected:
19  MAT update(const int mode) {
20  MAT Ht = this->m_local_ncp_factors.factor(mode).t();
21  if (m_nls_sizes[mode] > 0) {
22  Ht = arma::solve(arma::trimatl(this->global_gram),
23  this->ncp_local_mttkrp_t[mode]);
24  } else { // Return unmodified factor
25  Ht.zeros();
26  }
27  return Ht;
28  }
29 
30  public:
31  DistNTFCPALS(const Tensor &i_tensor, const int i_k, algotype i_algo,
32  const UVEC &i_global_dims, const UVEC &i_local_dims,
33  const UVEC &i_nls_sizes, const UVEC &i_nls_idxs,
34  const NTFMPICommunicator &i_mpicomm)
35  : DistAUNTF(i_tensor, i_k, i_algo, i_global_dims, i_local_dims,
36  i_nls_sizes, i_nls_idxs, i_mpicomm) {}
37 }; // class DistNTFMU
38 
39 } // namespace planc
40 
41 #endif // DISTNTF_DISTNTFCPALS_HPP_
Data is stored such that the unfolding is column major.
Definition: tensor.hpp:32
algotype
Definition: utils.h:10
#define UVEC
Definition: utils.h:58
DistNTFCPALS(const Tensor &i_tensor, const int i_k, algotype i_algo, const UVEC &i_global_dims, const UVEC &i_local_dims, const UVEC &i_nls_sizes, const UVEC &i_nls_idxs, const NTFMPICommunicator &i_mpicomm)
#define MAT
Definition: utils.h:52
ncp_factors contains the factors of the ncp every ith factor is of size n_i * k number of factors is ...
Definition: ncpfactors.hpp:20