Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions examples/r_KLU_GLU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,22 +141,22 @@ int main(int argc, char *argv[])

// Estimate solution error
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
real_type bnorm = sqrt(vector_handler->dot(vec_r, vec_r, "cuda"));
matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
real_type bnorm = sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE));
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);


matrix_handler->matrixInfNorm(A, &norm_A, "cuda");
norm_x = vector_handler->infNorm(vec_x, "cuda");
norm_r = vector_handler->infNorm(vec_r, "cuda");
matrix_handler->matrixInfNorm(A, &norm_A, ReSolve::memory::DEVICE);
norm_x = vector_handler->infNorm(vec_x, ReSolve::memory::DEVICE);
norm_r = vector_handler->infNorm(vec_r, ReSolve::memory::DEVICE);
std::cout << "\t Matrix inf norm: " << std::scientific << std::setprecision(16) << norm_A<<"\n"
<< "\t Residual inf norm: " << norm_r <<"\n"
<< "\t Solution inf norm: " << norm_x <<"\n"
<< "\t Norm of scaled residuals: "<< norm_r / (norm_A * norm_x) << "\n";

std::cout << "\t 2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda"))/bnorm << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE))/bnorm << "\n";

} // for (int i = 0; i < numSystems; ++i)

Expand Down
6 changes: 3 additions & 3 deletions examples/r_KLU_GLU_matrix_values_update.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,12 @@ int main(int argc, char *argv[])
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);


matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);

std::cout << "\t 2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda")) << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE)) << "\n";


}
Expand Down
12 changes: 6 additions & 6 deletions examples/r_KLU_KLU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,16 +134,16 @@ int main(int argc, char *argv[])
}
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::HOST);

matrix_handler->setValuesChanged(true, "cpu");
matrix_handler->setValuesChanged(true, ReSolve::memory::HOST);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE, "csr", "cpu");
norm_r = vector_handler->infNorm(vec_r, "cpu");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE, "csr", ReSolve::memory::HOST);
norm_r = vector_handler->infNorm(vec_r, ReSolve::memory::HOST);

std::cout << "\t2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cpu")) << "\n";
matrix_handler->matrixInfNorm(A, &norm_A, "cpu");
norm_x = vector_handler->infNorm(vec_x, "cpu");
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::HOST)) << "\n";
matrix_handler->matrixInfNorm(A, &norm_A, ReSolve::memory::HOST);
norm_x = vector_handler->infNorm(vec_x, ReSolve::memory::HOST);
std::cout << "\tMatrix inf norm: " << std::scientific << std::setprecision(16) << norm_A<<"\n"
<< "\tResidual inf norm: " << norm_r <<"\n"
<< "\tSolution inf norm: " << norm_x <<"\n"
Expand Down
6 changes: 3 additions & 3 deletions examples/r_KLU_KLU_standalone.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,13 @@ int main(int argc, char *argv[])
std::cout << "KLU solve status: " << status << std::endl;
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::HOST);

matrix_handler->setValuesChanged(true, "cpu");
matrix_handler->setValuesChanged(true, ReSolve::memory::HOST);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE, "csr", "cpu");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE, "csr", ReSolve::memory::HOST);

std::cout << "\t 2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cpu")) << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::HOST)) << "\n";



Expand Down
26 changes: 13 additions & 13 deletions examples/r_KLU_cusolverrf_redo_factorization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,11 @@ int main(int argc, char *argv[] )

//Now convert to CSR.
if (i < 2) {
matrix_handler->coo2csr(A_coo, A, "cpu");
matrix_handler->coo2csr(A_coo, A, ReSolve::memory::HOST);
vec_rhs->update(rhs, ReSolve::memory::HOST, ReSolve::memory::HOST);
vec_rhs->setDataUpdated(ReSolve::memory::HOST);
} else {
matrix_handler->coo2csr(A_coo, A, "cuda");
matrix_handler->coo2csr(A_coo, A, ReSolve::memory::DEVICE);
vec_rhs->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
}
std::cout<<"COO to CSR completed. Expanded NNZ: "<< A->getNnzExpanded()<<std::endl;
Expand All @@ -138,8 +138,8 @@ int main(int argc, char *argv[] )
U_csc = (ReSolve::matrix::Csc*) KLU->getUFactor();
ReSolve::matrix::Csr* L = new ReSolve::matrix::Csr(L_csc->getNumRows(), L_csc->getNumColumns(), L_csc->getNnz());
ReSolve::matrix::Csr* U = new ReSolve::matrix::Csr(U_csc->getNumRows(), U_csc->getNumColumns(), U_csc->getNnz());
matrix_handler->csc2csr(L_csc,L, "cuda");
matrix_handler->csc2csr(U_csc,U, "cuda");
matrix_handler->csc2csr(L_csc,L, ReSolve::memory::DEVICE);
matrix_handler->csc2csr(U_csc,U, ReSolve::memory::DEVICE);
if (L == nullptr) {
std::cout << "ERROR\n";
}
Expand All @@ -159,11 +159,11 @@ int main(int argc, char *argv[] )
}
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);

matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
res_nrm = sqrt(vector_handler->dot(vec_r, vec_r, "cuda"));
b_nrm = sqrt(vector_handler->dot(vec_rhs, vec_rhs, "cuda"));
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);
res_nrm = sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE));
b_nrm = sqrt(vector_handler->dot(vec_rhs, vec_rhs, ReSolve::memory::DEVICE));
std::cout << "\t2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< res_nrm/b_nrm << "\n";
Expand All @@ -184,10 +184,10 @@ int main(int argc, char *argv[] )
vec_rhs->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);

matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
res_nrm = sqrt(vector_handler->dot(vec_r, vec_r, "cuda"));
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);
res_nrm = sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE));

std::cout <<"\t New residual norm: "
<< std::scientific << std::setprecision(16)
Expand All @@ -199,8 +199,8 @@ int main(int argc, char *argv[] )

ReSolve::matrix::Csr* L = new ReSolve::matrix::Csr(L_csc->getNumRows(), L_csc->getNumColumns(), L_csc->getNnz());
ReSolve::matrix::Csr* U = new ReSolve::matrix::Csr(U_csc->getNumRows(), U_csc->getNumColumns(), U_csc->getNnz());
matrix_handler->csc2csr(L_csc, L, "cuda");
matrix_handler->csc2csr(U_csc, U, "cuda");
matrix_handler->csc2csr(L_csc, L, ReSolve::memory::DEVICE);
matrix_handler->csc2csr(U_csc, U, ReSolve::memory::DEVICE);

P = KLU->getPOrdering();
Q = KLU->getQOrdering();
Expand Down
10 changes: 5 additions & 5 deletions examples/r_KLU_rf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ int main(int argc, char *argv[] )
ReSolve::matrix::Csc* U_csc = (ReSolve::matrix::Csc*) KLU->getUFactor();
ReSolve::matrix::Csr* L = new ReSolve::matrix::Csr(L_csc->getNumRows(), L_csc->getNumColumns(), L_csc->getNnz());
ReSolve::matrix::Csr* U = new ReSolve::matrix::Csr(U_csc->getNumRows(), U_csc->getNumColumns(), U_csc->getNnz());
matrix_handler->csc2csr(L_csc,L, "cuda");
matrix_handler->csc2csr(U_csc,U, "cuda");
matrix_handler->csc2csr(L_csc,L, ReSolve::memory::DEVICE);
matrix_handler->csc2csr(U_csc,U, ReSolve::memory::DEVICE);
if (L == nullptr) {printf("ERROR");}
index_type* P = KLU->getPOrdering();
index_type* Q = KLU->getQOrdering();
Expand All @@ -152,13 +152,13 @@ int main(int argc, char *argv[] )
}
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);

matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);

std::cout << "\t 2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda")) << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE)) << "\n";

} // for (int i = 0; i < numSystems; ++i)

Expand Down
36 changes: 18 additions & 18 deletions examples/r_KLU_rf_FGMRES.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,37 +124,37 @@ int main(int argc, char *argv[])
real_type norm_b;
if (i < 2){
KLU->setup(A);
matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
status = KLU->analyze();
std::cout<<"KLU analysis status: "<<status<<std::endl;
status = KLU->factorize();
std::cout<<"KLU factorization status: "<<status<<std::endl;
status = KLU->solve(vec_rhs, vec_x);
std::cout<<"KLU solve status: "<<status<<std::endl;
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
norm_b = vector_handler->dot(vec_r, vec_r, "cuda");
norm_b = vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE);
norm_b = sqrt(norm_b);
matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);

matrix_handler->matrixInfNorm(A, &norm_A, "cuda");
norm_x = vector_handler->infNorm(vec_x, "cuda");
norm_r = vector_handler->infNorm(vec_r, "cuda");
matrix_handler->matrixInfNorm(A, &norm_A, ReSolve::memory::DEVICE);
norm_x = vector_handler->infNorm(vec_x, ReSolve::memory::DEVICE);
norm_r = vector_handler->infNorm(vec_r, ReSolve::memory::DEVICE);
std::cout << "\t Matrix inf norm: " << std::scientific << std::setprecision(16) << norm_A<<"\n"
<< "\t Residual inf norm: " << norm_r <<"\n"
<< "\t Solution inf norm: " << norm_x <<"\n"
<< "\t Norm of scaled residuals: "<< norm_r / (norm_A * norm_x) << "\n";

std::cout << "\t2-Norm of the residual: "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda"))/norm_b << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE))/norm_b << "\n";
if (i == 1) {
ReSolve::matrix::Csc* L_csc = (ReSolve::matrix::Csc*) KLU->getLFactor();
ReSolve::matrix::Csc* U_csc = (ReSolve::matrix::Csc*) KLU->getUFactor();
ReSolve::matrix::Csr* L = new ReSolve::matrix::Csr(L_csc->getNumRows(), L_csc->getNumColumns(), L_csc->getNnz());
ReSolve::matrix::Csr* U = new ReSolve::matrix::Csr(U_csc->getNumRows(), U_csc->getNumColumns(), U_csc->getNnz());
matrix_handler->csc2csr(L_csc,L, "cuda");
matrix_handler->csc2csr(U_csc,U, "cuda");
matrix_handler->csc2csr(L_csc,L, ReSolve::memory::DEVICE);
matrix_handler->csc2csr(U_csc,U, ReSolve::memory::DEVICE);
if (L == nullptr) {
std::cout << "ERROR\n";
}
Expand All @@ -174,28 +174,28 @@ int main(int argc, char *argv[])
std::cout<<"CUSOLVER RF solve status: "<<status<<std::endl;

vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
norm_b = vector_handler->dot(vec_r, vec_r, "cuda");
norm_b = vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE);
norm_b = sqrt(norm_b);

//matrix_handler->setValuesChanged(true, "cuda");
//matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
FGMRES->resetMatrix(A);
FGMRES->setupPreconditioner("LU", Rf);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);

matrix_handler->matrixInfNorm(A, &norm_A, "cuda");
norm_x = vector_handler->infNorm(vec_x, "cuda");
norm_r = vector_handler->infNorm(vec_r, "cuda");
matrix_handler->matrixInfNorm(A, &norm_A, ReSolve::memory::DEVICE);
norm_x = vector_handler->infNorm(vec_x, ReSolve::memory::DEVICE);
norm_r = vector_handler->infNorm(vec_r, ReSolve::memory::DEVICE);
std::cout << "\t Matrix inf norm: " << std::scientific << std::setprecision(16) << norm_A<<"\n"
<< "\t Residual inf norm: " << norm_r <<"\n"
<< "\t Solution inf norm: " << norm_x <<"\n"
<< "\t Norm of scaled residuals: "<< norm_r / (norm_A * norm_x) << "\n";

std::cout << "\t 2-Norm of the residual (before IR): "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda"))/norm_b << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE))/norm_b << "\n";

matrix_handler->matrixInfNorm(A, &norm_A, "cuda");
matrix_handler->matrixInfNorm(A, &norm_A, ReSolve::memory::DEVICE);
vec_rhs->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);

if(!std::isnan(norm_r) && !std::isinf(norm_r)) {
Expand Down
26 changes: 13 additions & 13 deletions examples/r_KLU_rf_FGMRES_reuse_factorization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,29 +125,29 @@ int main(int argc, char *argv[])
real_type norm_b;
if (i < 2){
KLU->setup(A);
matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
status = KLU->analyze();
std::cout<<"KLU analysis status: "<<status<<std::endl;
status = KLU->factorize();
std::cout<<"KLU factorization status: "<<status<<std::endl;
status = KLU->solve(vec_rhs, vec_x);
std::cout<<"KLU solve status: "<<status<<std::endl;
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
norm_b = vector_handler->dot(vec_r, vec_r, "cuda");
norm_b = vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE);
norm_b = sqrt(norm_b);
matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);
std::cout << "\t 2-Norm of the residual : "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda"))/norm_b << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE))/norm_b << "\n";
if (i == 1) {
ReSolve::matrix::Csc* L_csc = (ReSolve::matrix::Csc*) KLU->getLFactor();
ReSolve::matrix::Csc* U_csc = (ReSolve::matrix::Csc*) KLU->getUFactor();
ReSolve::matrix::Csr* L = new ReSolve::matrix::Csr(L_csc->getNumRows(), L_csc->getNumColumns(), L_csc->getNnz());
ReSolve::matrix::Csr* U = new ReSolve::matrix::Csr(U_csc->getNumRows(), U_csc->getNumColumns(), U_csc->getNnz());

matrix_handler->csc2csr(L_csc,L, "cuda");
matrix_handler->csc2csr(U_csc,U, "cuda");
matrix_handler->csc2csr(L_csc,L, ReSolve::memory::DEVICE);
matrix_handler->csc2csr(U_csc,U, ReSolve::memory::DEVICE);
if (L == nullptr) {
std::cout << "ERROR\n";
}
Expand All @@ -173,25 +173,25 @@ int main(int argc, char *argv[])
FGMRES->setupPreconditioner("LU", Rf);
}
//if (i%2!=0) vec_x->setToZero(ReSolve::memory::DEVICE);
real_type norm_x = vector_handler->dot(vec_x, vec_x, "cuda");
real_type norm_x = vector_handler->dot(vec_x, vec_x, ReSolve::memory::DEVICE);
std::cout << "Norm of x (before solve): "
<< std::scientific << std::setprecision(16)
<< sqrt(norm_x) << "\n";
std::cout<<"CUSOLVER RF solve status: "<<status<<std::endl;

vec_rhs->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
vec_r->update(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE);
norm_b = vector_handler->dot(vec_r, vec_r, "cuda");
norm_b = vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE);
norm_b = sqrt(norm_b);

matrix_handler->setValuesChanged(true, "cuda");
matrix_handler->setValuesChanged(true, ReSolve::memory::DEVICE);
FGMRES->resetMatrix(A);

matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", "cuda");
matrix_handler->matvec(A, vec_x, vec_r, &ONE, &MINUSONE,"csr", ReSolve::memory::DEVICE);

std::cout << "\t 2-Norm of the residual (before IR): "
<< std::scientific << std::setprecision(16)
<< sqrt(vector_handler->dot(vec_r, vec_r, "cuda"))/norm_b << "\n";
<< sqrt(vector_handler->dot(vec_r, vec_r, ReSolve::memory::DEVICE))/norm_b << "\n";
std::cout << "\t 2-Norm of the RIGHT HAND SIDE: "
<< std::scientific << std::setprecision(16)
<< norm_b << "\n";
Expand All @@ -205,7 +205,7 @@ int main(int argc, char *argv[])
<< " final nrm: "
<< FGMRES->getFinalResidualNorm()/norm_b
<< " iter: " << FGMRES->getNumIter() << "\n";
norm_x = vector_handler->dot(vec_x, vec_x, "cuda");
norm_x = vector_handler->dot(vec_x, vec_x, ReSolve::memory::DEVICE);
std::cout << "Norm of x (after IR): "
<< std::scientific << std::setprecision(16)
<< sqrt(norm_x) << "\n";
Expand Down
Loading