Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6340345
Rename 'mass' vector handler methods.
pelesh Feb 25, 2026
19e0286
Rename scale --> scal to match BLAS naming.
pelesh Feb 25, 2026
e8a13a7
Change infNorm --> iamax to match BLAS naming.
pelesh Feb 25, 2026
ea55213
Pass scalars by value in VectorHandler.
pelesh Feb 25, 2026
9ea6114
Check (multi)vector sizes in gemv.
pelesh Feb 25, 2026
e789965
Update comments in VectorHandler class.
pelesh Feb 25, 2026
e7366a7
Apply pre-commmit fixes
pelesh Feb 25, 2026
37077f5
Remove unused code.
pelesh Feb 25, 2026
81ad4b1
[skip ci] Update CHANGELOG.
pelesh Feb 25, 2026
9229a90
Change iamax --> amax.
pelesh Feb 26, 2026
5e71c8f
Vector handler methods set update flags correctly.
pelesh Feb 26, 2026
7b14ca1
Apply suggestion from @shakedregev
shakedregev Feb 26, 2026
a68f558
Fix scal function signature in CUDA implementation.
pelesh Feb 26, 2026
9a9691a
Harmonize CUDA and HIP kernel names with calling functions.
pelesh Feb 26, 2026
5e6540e
Apply pre-commmit fixes
pelesh Feb 26, 2026
2de6cbd
Add correct assert statements to Vector::gemv.
pelesh Mar 3, 2026
d28e741
Align Vector::scal with the adopted BLAS-like standard.
pelesh Mar 3, 2026
c0dc586
Update resolve/vector/VectorHandler.cpp
shakedregev Mar 3, 2026
aed62e2
Remove unnecessary argument n from VectorHandler::gemv
pelesh Mar 3, 2026
2e34bce
Add assert incluides explicitly to VectorHandler
pelesh Mar 3, 2026
dd5b4cd
fixed missing #include<cassert>
shakedregev Mar 3, 2026
b4f82ee
Apply pre-commmit fixes
shakedregev Mar 3, 2026
8d6fea5
Apply suggestion from @shakedregev
shakedregev Mar 3, 2026
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
3 changes: 1 addition & 2 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@
- [ ] CPU backend
- [ ] CUDA backend
- [ ] HIP backend
- [ ] I have manually run the non-experimental examples and verified that residuals are close to machine precision. (In your build directory run:
`./examples/<your_example>.exe -h` to get instructions how to run examples). Code tested on:
- [ ] I have manually run the non-experimental examples and verified that residuals are close to machine precision. (In your build directory run: `./examples/<your_example>.exe -h` to get instructions how to run examples). Code tested on:
- [ ] CPU backend
- [ ] CUDA backend
- [ ] HIP backend
Expand Down
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@

- Reworked templates to include example tests.

- Removed unnecessary full facotorization in the examples and made the input 1 based.
- Removed unnecessary full facotorization in the examples.

- Update method names in `VectorHandler` to match BLAS naming.

- Added `cons` counterparts to `Vector::getData` methods.

Expand Down
8 changes: 4 additions & 4 deletions examples/ExampleHelper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ namespace ReSolve
// Compute norm of scaled residuals
real_type inf_norm_A = 0.0;
mh_.matrixInfNorm(A_, &inf_norm_A, memspace_);
real_type inf_norm_x = vh_.infNorm(x_, memspace_);
real_type inf_norm_res = vh_.infNorm(res_, memspace_);
real_type inf_norm_x = vh_.amax(x_, memspace_);
real_type inf_norm_res = vh_.amax(res_, memspace_);
real_type nsr_norm = inf_norm_res / (inf_norm_A * inf_norm_x);
real_type error = std::abs(nsr_system - nsr_norm) / nsr_norm;

Expand Down Expand Up @@ -318,8 +318,8 @@ namespace ReSolve

// Compute norm of scaled residuals
mh_.matrixInfNorm(A_, &inf_norm_A_, memspace_);
inf_norm_x_ = vh_.infNorm(x_, memspace_);
inf_norm_res_ = vh_.infNorm(res_, memspace_);
inf_norm_x_ = vh_.amax(x_, memspace_);
inf_norm_res_ = vh_.amax(res_, memspace_);
nsr_norm_ = inf_norm_res_ / (inf_norm_A_ * inf_norm_x_);
}

Expand Down
1 change: 0 additions & 1 deletion examples/randGmres.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "ExampleHelper.hpp"
#include <resolve/GramSchmidt.hpp>
#include <resolve/LinSolverDirectCpuILU0.hpp>
#include <resolve/LinSolverDirectSerialILU0.hpp>
#include <resolve/LinSolverIterativeRandFGMRES.hpp>
#include <resolve/PreconditionerLU.hpp>
#include <resolve/matrix/Csr.hpp>
Expand Down
1 change: 0 additions & 1 deletion resolve/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ set(ReSolve_SRC
LinSolverIterativeFGMRES.cpp
LinSolverDirectCpuILU0.cpp
LinSolverIterativeRandFGMRES.cpp
LinSolverDirectSerialILU0.cpp
SystemSolver.cpp
Preconditioner.cpp
PreconditionerLU.cpp
Expand Down
37 changes: 21 additions & 16 deletions resolve/GramSchmidt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ namespace ReSolve
t = vector_handler_->dot(vec_v_, vec_w_, memspace_);
H[idxmap(i, j, num_vecs_ + 1)] = t;
t *= -1.0;
vector_handler_->axpy(&t, vec_v_, vec_w_, memspace_);
vector_handler_->axpy(t, vec_v_, vec_w_, memspace_);
}
t = 0.0;
t = vector_handler_->dot(vec_w_, vec_w_, memspace_);
Expand All @@ -168,7 +168,7 @@ namespace ReSolve
if (std::abs(t) > MACHINE_EPSILON)
{
t = 1.0 / t;
vector_handler_->scal(&t, vec_w_, memspace_);
vector_handler_->scal(t, vec_w_, memspace_);
}
else
{
Expand All @@ -178,10 +178,15 @@ namespace ReSolve
return 0;

case CGS2:
// std::cout << "k = " << i + 1 << std::endl;
// std::cout << "size of V: " << V->getSize() << std::endl;
// std::cout << "num vecs in V: " << V->getNumVectors() << std::endl;
// std::cout << "size of y (vec_v_): " << vec_v_->getSize() << std::endl;
// std::cout << "size of x (vec_Hcolumn_): " << vec_Hcolumn_->getSize() << std::endl << std::endl;
vec_v_->setData(V->getData(i + 1, memspace_), memspace_);
vector_handler_->gemv('T', n, i + 1, &ONE, &ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
vector_handler_->gemv('T', i + 1, ONE, ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
// V(:,i+1) = V(:, i+1) - V(:,1:i)*Hcol
vector_handler_->gemv('N', n, i + 1, &ONE, &MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
vector_handler_->gemv('N', i + 1, ONE, MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
mem_.deviceSynchronize();

// copy H_col to aux, we will need it later
Expand All @@ -191,11 +196,11 @@ namespace ReSolve
mem_.deviceSynchronize();

// Hcol = V(:,1:i)^T*V(:,i+1);
vector_handler_->gemv('T', n, i + 1, &ONE, &ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
vector_handler_->gemv('T', i + 1, ONE, ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
mem_.deviceSynchronize();

// V(:,i+1) = V(:, i+1) - V(:,1:i)*Hcol
vector_handler_->gemv('N', n, i + 1, &ONE, &MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
vector_handler_->gemv('N', i + 1, ONE, MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
mem_.deviceSynchronize();

// copy H_col to H
Expand All @@ -218,7 +223,7 @@ namespace ReSolve
if (std::abs(t) > MACHINE_EPSILON)
{
t = 1.0 / t;
vector_handler_->scal(&t, vec_v_, memspace_);
vector_handler_->scal(t, vec_v_, memspace_);
}
else
{
Expand All @@ -233,7 +238,7 @@ namespace ReSolve
vec_w_->setData(V->getData(i + 1, memspace_), memspace_);
vec_rv_->resize(i + 1);

vector_handler_->massDot2Vec(n, V, i + 1, vec_x_, vec_rv_, memspace_);
vector_handler_->dot2Multi(n, V, i + 1, vec_x_, vec_rv_, memspace_);
vec_rv_->setDataUpdated(memspace_);
if (memspace_ == memory::DEVICE)
{
Expand All @@ -260,7 +265,7 @@ namespace ReSolve
} // for j
vec_Hcolumn_->resize(i + 1);
vec_Hcolumn_->copyFromExternal(&H[idxmap(i, 0, num_vecs_ + 1)], memory::HOST, memspace_);
vector_handler_->massAxpy(n, vec_Hcolumn_, i + 1, V, vec_w_, memspace_);
vector_handler_->axpyMulti(n, vec_Hcolumn_, i + 1, V, vec_w_, memspace_);

// normalize (second synch)
t = vector_handler_->dot(vec_w_, vec_w_, memspace_);
Expand All @@ -270,7 +275,7 @@ namespace ReSolve
if (std::abs(t) > MACHINE_EPSILON)
{
t = 1.0 / t;
vector_handler_->scal(&t, vec_w_, memspace_);
vector_handler_->scal(t, vec_w_, memspace_);
for (int ii = 0; ii <= i; ++ii)
{
vec_v_->setData(V->getData(ii, memspace_), memspace_);
Expand All @@ -290,7 +295,7 @@ namespace ReSolve
vec_w_->setData(V->getData(i + 1, memspace_), memspace_);
vec_rv_->resize(i + 1);

vector_handler_->massDot2Vec(n, V, i + 1, vec_x_, vec_rv_, memspace_);
vector_handler_->dot2Multi(n, V, i + 1, vec_x_, vec_rv_, memspace_);
vec_rv_->setDataUpdated(memspace_);
if (memspace_ == memory::DEVICE)
{
Expand Down Expand Up @@ -351,7 +356,7 @@ namespace ReSolve
vec_Hcolumn_->resize(i + 1);
vec_Hcolumn_->copyFromExternal(&H[idxmap(i, 0, num_vecs_ + 1)], memory::HOST, memspace_);

vector_handler_->massAxpy(n, vec_Hcolumn_, i + 1, V, vec_w_, memspace_);
vector_handler_->axpyMulti(n, vec_Hcolumn_, i + 1, V, vec_w_, memspace_);
// normalize (second synch)
t = vector_handler_->dot(vec_w_, vec_w_, memspace_);
// set the last entry in Hessenberg matrix
Expand All @@ -360,7 +365,7 @@ namespace ReSolve
if (std::abs(t) > MACHINE_EPSILON)
{
t = 1.0 / t;
vector_handler_->scal(&t, vec_w_, memspace_);
vector_handler_->scal(t, vec_w_, memspace_);
}
else
{
Expand All @@ -373,9 +378,9 @@ namespace ReSolve
case CGS1:
vec_v_->setData(V->getData(i + 1, memspace_), memspace_);
// Hcol = V(:,1:i)^T*V(:,i+1);
vector_handler_->gemv('T', n, i + 1, &ONE, &ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
vector_handler_->gemv('T', i + 1, ONE, ZERO, V, vec_v_, vec_Hcolumn_, memspace_);
// V(:,i+1) = V(:, i+1) - V(:,1:i)*Hcol
vector_handler_->gemv('N', n, i + 1, &ONE, &MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
vector_handler_->gemv('N', i + 1, ONE, MINUS_ONE, V, vec_Hcolumn_, vec_v_, memspace_);
mem_.deviceSynchronize();

// copy H_col to H
Expand All @@ -391,7 +396,7 @@ namespace ReSolve
if (std::abs(t) > MACHINE_EPSILON)
{
t = 1.0 / t;
vector_handler_->scal(&t, vec_v_, memspace_);
vector_handler_->scal(t, vec_v_, memspace_);
}
else
{
Expand Down
Loading
Loading