Skip to content

Commit

Permalink
Merge simplified copy to device in tests and examples
Browse files Browse the repository at this point in the history
This PR replaces the common "create, then copy_from" pattern in tests and examples by gko::clone(exec, mtx).

Related PR: #863
  • Loading branch information
upsj authored Aug 26, 2021
2 parents ca3809c + 7ec21da commit 2811c26
Show file tree
Hide file tree
Showing 94 changed files with 1,018 additions and 1,967 deletions.
6 changes: 2 additions & 4 deletions core/preconditioner/isai.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,10 +221,8 @@ void Isai<IsaiType, ValueType, IndexType>::generate_inverse(
excess_row_ptrs_full.get_const_data(), lend(excess_system),
lend(excess_rhs), excess_start, block));
// solve it after transposing
auto system_copy = Csr::create(exec->get_master());
system_copy->copy_from(excess_system.get());
auto rhs_copy = Dense::create(exec->get_master());
rhs_copy->copy_from(excess_rhs.get());
auto system_copy = gko::clone(exec->get_master(), excess_system);
auto rhs_copy = gko::clone(exec->get_master(), excess_rhs);
std::shared_ptr<LinOpFactory> excess_solver_factory;
if (parameters_.excess_solver_factory) {
excess_solver_factory =
Expand Down
3 changes: 1 addition & 2 deletions cuda/test/factorization/ic_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ class Ic : public ::testing::Test {
<< "\", which is required for this test.\n";
}
csr_ref = gko::read<Csr>(input_file, ref);
csr_cuda = Csr::create(cuda);
csr_cuda->copy_from(gko::lend(csr_ref));
csr_cuda = gko::clone(cuda, csr_ref);
}
};

Expand Down
3 changes: 1 addition & 2 deletions cuda/test/factorization/ilu_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ class Ilu : public ::testing::Test {
<< "\", which is required for this test.\n";
}
csr_ref = gko::read<Csr>(input_file, ref);
csr_cuda = Csr::create(cuda);
csr_cuda->copy_from(gko::lend(csr_ref));
csr_cuda = gko::clone(cuda, csr_ref);
}
};

Expand Down
9 changes: 3 additions & 6 deletions cuda/test/factorization/par_ic_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,7 @@ class ParIc : public ::testing::Test {
dmtx_ani = Csr::create(cuda);
dmtx_l_ani = Csr::create(cuda);
dmtx_l_ani_init = Csr::create(cuda);
dmtx_l = Csr::create(cuda);
dmtx_l->copy_from(lend(mtx_l));
dmtx_l = gko::clone(cuda, mtx_l);
}

void SetUp()
Expand All @@ -109,8 +108,7 @@ class ParIc : public ::testing::Test {
l_builder.get_value_array().resize_and_reset(l_nnz);
gko::kernels::reference::factorization::initialize_l(
ref, lend(mtx_ani), lend(mtx_l_ani), false);
mtx_l_ani_init = Csr::create(ref);
mtx_l_ani_init->copy_from(lend(mtx_l_ani));
mtx_l_ani_init = gko::clone(ref, mtx_l_ani);
gko::kernels::reference::par_ic_factorization::init_factor(
ref, lend(mtx_l_ani_init));
}
Expand Down Expand Up @@ -152,8 +150,7 @@ TEST_F(ParIc, KernelComputeFactorIsEquivalentToRef)
auto square_size = mtx_ani->get_size();
auto mtx_l_coo = Coo::create(ref, square_size);
mtx_l_ani->convert_to(lend(mtx_l_coo));
auto dmtx_l_coo = Coo::create(cuda, square_size);
dmtx_l_coo->copy_from(lend(mtx_l_coo));
auto dmtx_l_coo = gko::clone(cuda, mtx_l_coo);

gko::kernels::reference::par_ic_factorization::compute_factor(
ref, 1, lend(mtx_l_coo), lend(mtx_l_ani_init));
Expand Down
6 changes: 2 additions & 4 deletions cuda/test/factorization/par_ict_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,8 @@ class ParIct : public ::testing::Test {

dmtx_ani = Csr::create(cuda);
dmtx_l_ani = Csr::create(cuda);
dmtx = Csr::create(cuda);
dmtx->copy_from(lend(mtx));
dmtx_l = Csr::create(cuda);
dmtx_l->copy_from(lend(mtx_l));
dmtx = gko::clone(cuda, mtx);
dmtx_l = gko::clone(cuda, mtx_l);
}

void SetUp()
Expand Down
12 changes: 4 additions & 8 deletions cuda/test/factorization/par_ilu_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,7 @@ class ParIlu : public ::testing::Test {
<< "\", which is required for this test.\n";
}
auto csr_ref_temp = gko::read<Csr>(input_file, ref);
auto csr_cuda_temp = Csr::create(cuda);
csr_cuda_temp->copy_from(gko::lend(csr_ref_temp));
auto csr_cuda_temp = gko::clone(cuda, csr_ref_temp);
// Make sure there are diagonal elements present
gko::kernels::reference::factorization::add_diagonal_elements(
ref, gko::lend(csr_ref_temp), false);
Expand Down Expand Up @@ -226,8 +225,7 @@ TEST_F(ParIlu, CudaKernelAddDiagonalElementsSortedEquivalentToRef)
index_type num_rows{600};
index_type num_cols{600};
auto mtx_ref = gen_mtx<Csr>(num_rows, num_cols);
auto mtx_cuda = Csr::create(cuda);
mtx_cuda->copy_from(gko::lend(mtx_ref));
auto mtx_cuda = gko::clone(cuda, mtx_ref);

gko::kernels::reference::factorization::add_diagonal_elements(
ref, gko::lend(mtx_ref), true);
Expand All @@ -245,8 +243,7 @@ TEST_F(ParIlu, CudaKernelAddDiagonalElementsUnsortedEquivalentToRef)
index_type num_rows{600};
index_type num_cols{600};
auto mtx_ref = gen_unsorted_mtx(num_rows, num_cols);
auto mtx_cuda = Csr::create(cuda);
mtx_cuda->copy_from(gko::lend(mtx_ref));
auto mtx_cuda = gko::clone(cuda, mtx_ref);

gko::kernels::reference::factorization::add_diagonal_elements(
ref, gko::lend(mtx_ref), false);
Expand All @@ -264,8 +261,7 @@ TEST_F(ParIlu, CudaKernelAddDiagonalElementsNonSquareEquivalentToRef)
index_type num_rows{600};
index_type num_cols{500};
auto mtx_ref = gen_mtx<Csr>(num_rows, num_cols);
auto mtx_cuda = Csr::create(cuda);
mtx_cuda->copy_from(gko::lend(mtx_ref));
auto mtx_cuda = gko::clone(cuda, mtx_ref);

gko::kernels::reference::factorization::add_diagonal_elements(
ref, gko::lend(mtx_ref), true);
Expand Down
24 changes: 8 additions & 16 deletions cuda/test/factorization/par_ilut_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,26 +115,18 @@ class ParIlut : public ::testing::Test {
std::uniform_int_distribution<>(10, mtx_size[0]),
std::normal_distribution<>(-1.0, 1.0), rand_engine, ref);

dmtx1 = Csr::create(cuda);
dmtx1->copy_from(mtx1.get());
dmtx2 = Csr::create(cuda);
dmtx2->copy_from(mtx2.get());
dmtx_square = Csr::create(cuda);
dmtx_square->copy_from(mtx_square.get());
dmtx1 = gko::clone(cuda, mtx1);
dmtx2 = gko::clone(cuda, mtx2);
dmtx_square = gko::clone(cuda, mtx_square);
dmtx_ani = Csr::create(cuda);
dmtx_l_ani = Csr::create(cuda);
dmtx_u_ani = Csr::create(cuda);
dmtx_ut_ani = Csr::create(cuda);
dmtx_l = Csr::create(cuda);
dmtx_l->copy_from(mtx_l.get());
dmtx_l2 = Csr::create(cuda);
dmtx_l2->copy_from(mtx_l2.get());
dmtx_u = Csr::create(cuda);
dmtx_u->copy_from(mtx_u.get());
dmtx_l_complex = ComplexCsr::create(cuda);
dmtx_l_complex->copy_from(mtx_l_complex.get());
dmtx_u_complex = ComplexCsr::create(cuda);
dmtx_u_complex->copy_from(mtx_u_complex.get());
dmtx_l = gko::clone(cuda, mtx_l);
dmtx_l2 = gko::clone(cuda, mtx_l2);
dmtx_u = gko::clone(cuda, mtx_u);
dmtx_l_complex = gko::clone(cuda, mtx_l_complex);
dmtx_u_complex = gko::clone(cuda, mtx_u_complex);
}

void SetUp()
Expand Down
36 changes: 12 additions & 24 deletions cuda/test/matrix/coo_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,22 +87,16 @@ class Coo : public ::testing::Test {

void set_up_apply_data(int num_vectors = 1)
{
mtx = Mtx::create(ref);
mtx->copy_from(gen_mtx(532, 231));
mtx = gen_mtx<Mtx>(532, 231);
expected = gen_mtx(532, num_vectors);
y = gen_mtx(231, num_vectors);
alpha = gko::initialize<Vec>({2.0}, ref);
beta = gko::initialize<Vec>({-1.0}, ref);
dmtx = Mtx::create(cuda);
dmtx->copy_from(mtx.get());
dresult = Vec::create(cuda);
dresult->copy_from(expected.get());
dy = Vec::create(cuda);
dy->copy_from(y.get());
dalpha = Vec::create(cuda);
dalpha->copy_from(alpha.get());
dbeta = Vec::create(cuda);
dbeta->copy_from(beta.get());
dmtx = gko::clone(cuda, mtx);
dresult = gko::clone(cuda, expected);
dy = gko::clone(cuda, y);
dalpha = gko::clone(cuda, alpha);
dbeta = gko::clone(cuda, beta);
}

void unsort_mtx()
Expand Down Expand Up @@ -292,11 +286,9 @@ TEST_F(Coo, ApplyToComplexIsEquivalentToRef)
{
set_up_apply_data();
auto complex_b = gen_mtx<ComplexVec>(231, 3);
auto dcomplex_b = ComplexVec::create(cuda);
dcomplex_b->copy_from(complex_b.get());
auto dcomplex_b = gko::clone(cuda, complex_b);
auto complex_x = gen_mtx<ComplexVec>(532, 3);
auto dcomplex_x = ComplexVec::create(cuda);
dcomplex_x->copy_from(complex_x.get());
auto dcomplex_x = gko::clone(cuda, complex_x);

mtx->apply(complex_b.get(), complex_x.get());
dmtx->apply(dcomplex_b.get(), dcomplex_x.get());
Expand All @@ -309,11 +301,9 @@ TEST_F(Coo, AdvancedApplyToComplexIsEquivalentToRef)
{
set_up_apply_data();
auto complex_b = gen_mtx<ComplexVec>(231, 3);
auto dcomplex_b = ComplexVec::create(cuda);
dcomplex_b->copy_from(complex_b.get());
auto dcomplex_b = gko::clone(cuda, complex_b);
auto complex_x = gen_mtx<ComplexVec>(532, 3);
auto dcomplex_x = ComplexVec::create(cuda);
dcomplex_x->copy_from(complex_x.get());
auto dcomplex_x = gko::clone(cuda, complex_x);

mtx->apply(alpha.get(), complex_b.get(), beta.get(), complex_x.get());
dmtx->apply(dalpha.get(), dcomplex_b.get(), dbeta.get(), dcomplex_x.get());
Expand All @@ -326,11 +316,9 @@ TEST_F(Coo, ApplyAddToComplexIsEquivalentToRef)
{
set_up_apply_data();
auto complex_b = gen_mtx<ComplexVec>(231, 3);
auto dcomplex_b = ComplexVec::create(cuda);
dcomplex_b->copy_from(complex_b.get());
auto dcomplex_b = gko::clone(cuda, complex_b);
auto complex_x = gen_mtx<ComplexVec>(532, 3);
auto dcomplex_x = ComplexVec::create(cuda);
dcomplex_x->copy_from(complex_x.get());
auto dcomplex_x = gko::clone(cuda, complex_x);

mtx->apply2(alpha.get(), complex_b.get(), complex_x.get());
dmtx->apply2(dalpha.get(), dcomplex_b.get(), dcomplex_x.get());
Expand Down
44 changes: 15 additions & 29 deletions cuda/test/matrix/csr_kernels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,10 @@ class Csr : public ::testing::Test {
dmtx->copy_from(mtx.get());
square_dmtx = Mtx::create(cuda, strategy);
square_dmtx->copy_from(square_mtx.get());
dresult = Vec::create(cuda);
dresult->copy_from(expected.get());
dy = Vec::create(cuda);
dy->copy_from(y.get());
dalpha = Vec::create(cuda);
dalpha->copy_from(alpha.get());
dbeta = Vec::create(cuda);
dbeta->copy_from(beta.get());
dresult = gko::clone(cuda, expected);
dy = gko::clone(cuda, y);
dalpha = gko::clone(cuda, alpha);
dbeta = gko::clone(cuda, beta);

std::vector<int> tmp(mtx->get_size()[0], 0);
auto rng = std::default_random_engine{};
Expand Down Expand Up @@ -434,10 +430,8 @@ TEST_F(Csr, AdvancedApplyToIdentityMatrixIsEquivalentToRef)
set_up_apply_data(std::make_shared<Mtx::automatical>());
auto a = gen_mtx<Mtx>(mtx_size[0], mtx_size[1], 0);
auto b = gen_mtx<Mtx>(mtx_size[0], mtx_size[1], 0);
auto da = Mtx::create(cuda);
auto db = Mtx::create(cuda);
da->copy_from(a.get());
db->copy_from(b.get());
auto da = gko::clone(cuda, a);
auto db = gko::clone(cuda, b);
auto id = gko::matrix::Identity<Mtx::value_type>::create(ref, mtx_size[1]);
auto did =
gko::matrix::Identity<Mtx::value_type>::create(cuda, mtx_size[1]);
Expand All @@ -455,11 +449,9 @@ TEST_F(Csr, ApplyToComplexIsEquivalentToRef)
{
set_up_apply_data(std::make_shared<Mtx::automatical>());
auto complex_b = gen_mtx<ComplexVec>(this->mtx_size[1], 3, 1);
auto dcomplex_b = ComplexVec::create(cuda);
dcomplex_b->copy_from(complex_b.get());
auto dcomplex_b = gko::clone(cuda, complex_b);
auto complex_x = gen_mtx<ComplexVec>(this->mtx_size[0], 3, 1);
auto dcomplex_x = ComplexVec::create(cuda);
dcomplex_x->copy_from(complex_x.get());
auto dcomplex_x = gko::clone(cuda, complex_x);

mtx->apply(complex_b.get(), complex_x.get());
dmtx->apply(dcomplex_b.get(), dcomplex_x.get());
Expand All @@ -472,11 +464,9 @@ TEST_F(Csr, AdvancedApplyToComplexIsEquivalentToRef)
{
set_up_apply_data(std::make_shared<Mtx::automatical>());
auto complex_b = gen_mtx<ComplexVec>(this->mtx_size[1], 3, 1);
auto dcomplex_b = ComplexVec::create(cuda);
dcomplex_b->copy_from(complex_b.get());
auto dcomplex_b = gko::clone(cuda, complex_b);
auto complex_x = gen_mtx<ComplexVec>(this->mtx_size[0], 3, 1);
auto dcomplex_x = ComplexVec::create(cuda);
dcomplex_x->copy_from(complex_x.get());
auto dcomplex_x = gko::clone(cuda, complex_x);

mtx->apply(alpha.get(), complex_b.get(), beta.get(), complex_x.get());
dmtx->apply(dalpha.get(), dcomplex_b.get(), dbeta.get(), dcomplex_x.get());
Expand Down Expand Up @@ -865,15 +855,11 @@ TEST_F(Csr, OneAutomaticalWorksWithDifferentMatrices)
auto automatical = std::make_shared<Mtx::automatical>();
auto row_len_limit = std::max(automatical->nvidia_row_len_limit,
automatical->amd_row_len_limit);
auto load_balance_mtx = Mtx::create(ref);
auto classical_mtx = Mtx::create(ref);
load_balance_mtx->copy_from(
gen_mtx<Vec>(1, row_len_limit + 1000, row_len_limit + 1));
classical_mtx->copy_from(gen_mtx<Vec>(50, 50, 1));
auto load_balance_mtx_d = Mtx::create(cuda);
auto classical_mtx_d = Mtx::create(cuda);
load_balance_mtx_d->copy_from(load_balance_mtx.get());
classical_mtx_d->copy_from(classical_mtx.get());
auto load_balance_mtx =
gen_mtx<Mtx>(1, row_len_limit + 1000, row_len_limit + 1);
auto classical_mtx = gen_mtx<Mtx>(50, 50, 1);
auto load_balance_mtx_d = gko::clone(cuda, load_balance_mtx);
auto classical_mtx_d = gko::clone(cuda, classical_mtx);

load_balance_mtx_d->set_strategy(automatical);
classical_mtx_d->set_strategy(automatical);
Expand Down
Loading

0 comments on commit 2811c26

Please sign in to comment.