3 #ifndef DISTNTF_DISTNTFHALS_HPP_ 4 #define DISTNTF_DISTNTFHALS_HPP_ 19 MAT update(
const int mode) {
20 MAT H(this->m_local_ncp_factors.factor(mode));
22 for (
int i = 0; i < this->m_local_ncp_factors.rank(); i++) {
24 if (m_nls_sizes[mode] > 0) {
25 updHi = H.col(i) + ((this->ncp_local_mttkrp_t[mode].row(i)).t() -
26 H * this->global_gram.col(i));
32 fixNumericalError<VEC>(&updHi);
33 double normHi = arma::norm(updHi, 2);
35 double globalnormHi = normHi;
36 MPI_Allreduce(&normHi, &globalnormHi, 1, MPI_DOUBLE, MPI_SUM,
38 if (globalnormHi > 0) {
47 const UVEC &i_global_dims,
const UVEC &i_local_dims,
48 const UVEC &i_nls_sizes,
const UVEC &i_nls_idxs,
50 :
DistAUNTF(i_tensor, i_k, i_algo, i_global_dims, i_local_dims,
51 i_nls_sizes, i_nls_idxs, i_mpicomm) {}
56 #endif // DISTNTF_DISTNTFHALS_HPP_ Data is stored such that the unfolding is column major.
DistNTFHALS(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)
ncp_factors contains the factors of the ncp every ith factor is of size n_i * k number of factors is ...