Skip to content

Commit 33f5bad

Browse files
committed
fix the waste of memory in matsym
1 parent 7da86cd commit 33f5bad

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

source/module_lr/utils/lr_util.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,37 +62,33 @@ namespace LR_Util
6262
template<>
6363
void matsym<double>(const double* in, const int n, const Parallel_2D& pmat, double* out)
6464
{
65-
for (int i = 0;i < pmat.get_local_size();++i) {out[i] = in[i];
66-
}
65+
for (int i = 0;i < pmat.get_local_size();++i) { out[i] = in[i]; }
6766
const double alpha = 0.5, beta = 0.5;
6867
const int i1 = 1;
6968
pdtran_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc);
7069
}
7170
template<>
7271
void matsym<double>(double* inout, const int n, const Parallel_2D& pmat)
7372
{
74-
std::vector<double> tmp(n * n);
75-
for (int i = 0;i < pmat.get_local_size();++i) {tmp[i] = inout[i];
76-
}
73+
std::vector<double> tmp(pmat.get_local_size());
74+
std::copy(inout, inout + pmat.get_local_size(), tmp.begin());
7775
const double alpha = 0.5, beta = 0.5;
7876
const int i1 = 1;
7977
pdtran_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc);
8078
}
8179
template<>
8280
void matsym<std::complex<double>>(const std::complex<double>* in, const int n, const Parallel_2D& pmat, std::complex<double>* out)
8381
{
84-
for (int i = 0;i < pmat.get_local_size();++i) {out[i] = in[i];
85-
}
82+
for (int i = 0;i < pmat.get_local_size();++i) { out[i] = in[i]; }
8683
const std::complex<double> alpha(0.5, 0.0), beta(0.5, 0.0);
8784
const int i1 = 1;
8885
pztranc_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc);
8986
}
9087
template<>
9188
void matsym<std::complex<double>>(std::complex<double>* inout, const int n, const Parallel_2D& pmat)
9289
{
93-
std::vector<std::complex<double>> tmp(n * n);
94-
for (int i = 0;i < pmat.get_local_size();++i) {tmp[i] = inout[i];
95-
}
90+
std::vector<std::complex<double>> tmp(pmat.get_local_size());
91+
std::copy(inout, inout + pmat.get_local_size(), tmp.begin());
9692
const std::complex<double> alpha(0.5, 0.0), beta(0.5, 0.0);
9793
const int i1 = 1;
9894
pztranc_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc);

0 commit comments

Comments
 (0)