Skip to content

Commit

Permalink
support for different LSQ linear solvers. (#441)
Browse files Browse the repository at this point in the history
* added support for using different LSQ linear solvers.
  • Loading branch information
cnpetra committed Mar 31, 2022
1 parent 3d65817 commit ba0fb3b
Show file tree
Hide file tree
Showing 7 changed files with 605 additions and 418 deletions.
4 changes: 2 additions & 2 deletions src/LinAlg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ set(hiopLinAlg_PARDISO_SRC

set(hiopLinAlg_CUSOLVER_SRC
hiopLinSolverSparseCUSOLVER.cpp
#hiopLinSolverCholCuSparse.cpp
hiopLinSolverCholCuSparse.cpp
)

set(hiopLinAlg_KRON_REDUCTION_SRC
Expand Down Expand Up @@ -116,7 +116,7 @@ endif()
if(HIOP_USE_GPU)
list(APPEND hiopLinAlg_SRC ${hiopLinAlg_GPU_SRC})
if(HIOP_USE_CUDA)
set_source_files_properties(${hiopLinAlg_RAJA_SRC} ${hiopLinAlg_CUSOLVER_SRC} hiopLinSolverCholCuSparse.cpp PROPERTIES LANGUAGE CUDA)
set_source_files_properties(${hiopLinAlg_RAJA_SRC} ${hiopLinAlg_CUSOLVER_SRC} PROPERTIES LANGUAGE CUDA)
endif()
endif()

Expand Down
20 changes: 10 additions & 10 deletions src/LinAlg/hiopLinSolverSparseCUSOLVER.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ namespace hiop

int hiopLinSolverSymSparseCUSOLVER::initializeCusolverGLU()
{
nlp_->log->printf(hovSummary, "CUSOLVER: Glu \n");
nlp_->log->printf(hovScalars, "CUSOLVER: Glu \n");
cusparseCreateMatDescr(&descr_M_);
cusparseSetMatType(descr_M_, CUSPARSE_MATRIX_TYPE_GENERAL);
cusparseSetMatIndexBase(descr_M_, CUSPARSE_INDEX_BASE_ZERO);
Expand All @@ -339,7 +339,7 @@ namespace hiop

int hiopLinSolverSymSparseCUSOLVER::initializeCusolverRf()
{
nlp_->log->printf(hovSummary, "CUSOLVER: Rf \n");
nlp_->log->printf(hovScalars, "CUSOLVER: Rf \n");
cusolverRfCreate(&handle_rf_);

checkCudaErrors(cusolverRfSetAlgs(handle_rf_,
Expand Down Expand Up @@ -732,13 +732,13 @@ namespace hiop
if((Numeric_ == nullptr) && (factorizationSetupSucc_ == 0)) {
Numeric_ = klu_factor(kRowPtr_, jCol_, kVal_, Symbolic_, &Common_);
if(Numeric_ == nullptr) {
nlp_->log->printf(hovSummary, "Numeric factorization failed. Regularizing ...\n");
nlp_->log->printf(hovWarning, "Numeric klu factorization failed. Regularizing ...\n");
// This is not a catastrophic failure
// The matrix is singular so return -1 to regularaize!
return -1;
} else { // Numeric was succesfull so now can set up
factorizationSetupSucc_ = 1;
nlp_->log->printf(hovSummary, "Numeric factorization succesful! \n");
nlp_->log->printf(hovScalars, "Numeric klu factorization succesful! \n");
if(refact_ == "glu") {
this->initializeCusolverGLU();
this->refactorizationSetupCusolverGLU();
Expand Down Expand Up @@ -1100,7 +1100,7 @@ namespace hiop
hiopLinSolverNonSymSparseCUSOLVER::initializeCusolverGLU()
{

nlp_->log->printf(hovSummary, "CUSOLVER: Glu \n");
nlp_->log->printf(hovScalars, "CUSOLVER: Glu \n");
cusparseCreateMatDescr(&descr_M_);
cusparseSetMatType(descr_M_, CUSPARSE_MATRIX_TYPE_GENERAL);
cusparseSetMatIndexBase(descr_M_, CUSPARSE_INDEX_BASE_ZERO);
Expand All @@ -1115,7 +1115,7 @@ namespace hiop
int
hiopLinSolverNonSymSparseCUSOLVER::initializeCusolverRf()
{
nlp_->log->printf(hovSummary, "CUSOLVER: Rf \n");
nlp_->log->printf(hovScalars, "CUSOLVER: Rf \n");
cusolverRfCreate(&handle_rf_);

checkCudaErrors(cusolverRfSetAlgs(handle_rf_,
Expand Down Expand Up @@ -1445,19 +1445,19 @@ namespace hiop
if((Numeric_ == nullptr) && (factorizationSetupSucc_ == 0)) {
Numeric_ = klu_factor(kRowPtr_, jCol_, kVal_, Symbolic_, &Common_);
if(Numeric_ == nullptr) {
nlp_->log->printf(hovSummary, "Numeric factorization failed. Regularizing ...\n");
nlp_->log->printf(hovWarning, "Numeric klu factorization failed. Regularizing ...\n");
// This is not a catastrophic failure
// The matrix is singular so return -1 to regularaize!
return -1;
} else { // Numeric was succesfull so now can set up
factorizationSetupSucc_ = 1;
nlp_->log->printf(hovSummary, "Numeric factorization succesful! \n");
nlp_->log->printf(hovScalars, "Numeric klu factorization succesful! \n");
if(refact_ == "glu") {
this->initializeCusolverGLU();
this->refactorizationSetupCusolverGLU();
} else if(refact_ == "rf") {
this->initializeCusolverRf();
this->refactorizationSetupCusolverRf();
this->initializeCusolverRf();
this->refactorizationSetupCusolverRf();
} else { // for future -
assert(0 && "Only glu and rf refactorizations available.\n");
}
Expand Down
Loading

0 comments on commit ba0fb3b

Please sign in to comment.