Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: Code failing to execute when changes CUDA to reference executor #817

Closed
aborzunov opened this issue Jul 5, 2021 · 7 comments
Closed
Labels
is:bug Something looks wrong.

Comments

@aborzunov
Copy link

I have some piece of code that works when executor is CUDA, but fails with munmap_chunk(): invalid pointer when I change executor to Reference or Omp.

    {
        std::ifstream ifs {f};
        auto j = nlohmann::json::parse(ifs);

        auto dim = 0ul;
        auto nnz = 0ul;

        j.at("nnz").get_to(nnz);
        j.at("dim").get_to(dim);

        std::vector<int> I(nnz);
        std::vector<int> J(nnz);
        std::vector<double> V(nnz);
        std::vector< double > B(dim);

        j.at("I").get_to(I);
        j.at("J").get_to(J);
        j.at("V").get_to(V);
        j.at("B").get_to(B);

        auto host = gko::ReferenceExecutor::create();

        // auto exec = gko::ReferenceExecutor::create();
        // auto exec = gko::OmpExecutor::create();
        auto exec = gko::CudaExecutor::create(0, gko::ReferenceExecutor::create(), true);
        {
            using coo = gko::matrix::Coo<double>;
            using vec = gko::matrix::Dense<double>;

            auto lA = coo::create(exec, gko::dim<2>{dim, dim},
                    gko::Array<double>::view(host, nnz, V.data()),
                    gko::Array<int>::view(host, nnz, J.data()),
                    gko::Array<int>::view(host, nnz, I.data()));
            auto lB = vec::create(exec, gko::dim<2>{dim, 1},
                    gko::Array< double >::view(host, nnz, B.data()),
                    1);
            auto lX = vec::create(exec, gko::dim<2>{dim, 1},
                    gko::Array< double >::view(host, nnz, B.data()),
                    1);

            auto solver =
                gko::solver::Bicgstab<>::build()
                    .with_preconditioner(gko::preconditioner::Jacobi<>::build().on(exec))
                    .with_criteria(
                        gko::stop::Iteration::build().with_max_iters(dim).on(exec),
                        gko::stop::ResidualNormReduction<>::build()
                            .with_reduction_factor(1E-10)
                            .on(exec))
                    .on(exec)
                    ->generate(gko::give(lA));

            solver->apply(gko::lend(lB), gko::lend(lX));       
        }
    }

If I create system matrix with read from matrix market mtx file, it will work. So, I think, the problem is in the way I create Coo matrix from existing data.
matrix.zip

Thanks!

P.S. It would be nice if you add several documented examples in doxygen/wiki how to create gko::matrices from existing data (including thrust::device_vector). Because it is quite hard for beginner to figure this out. I addressed your article and unit-tests to compose my little program.

@upsj
Copy link
Member

upsj commented Jul 5, 2021

Thanks for your report! Can you try running the same code under valgrind or gdb to give a bit more context to where the crash happens?

@upsj upsj added the is:bug Something looks wrong. label Jul 5, 2021
@upsj
Copy link
Member

upsj commented Jul 5, 2021

And yes, our documentation and examples deserve a bit more attention, we are working on that :)

@aborzunov
Copy link
Author

Thanks for your report! Can you try running the same code under valgrind or gdb to give a bit more context to where the crash happens?

I stripped my project specific paths with %path%, hope it won't cause any difficulties:

gdb log
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007fffe6ea4859 in __GI_abort () at abort.c:79
#2  0x00007fffe6f0f3ee in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7fffe7039285 "%s\n")
    at ../sysdeps/posix/libc_fatal.c:155
#3  0x00007fffe6f1747c in malloc_printerr (str=str@entry=0x7fffe703b1e0 "munmap_chunk(): invalid pointer")
    at malloc.c:5347
#4  0x00007fffe6f176cc in munmap_chunk (p=<optimized out>) at malloc.c:2830
#5  0x00005555559a7618 in gko::Executor::free (this=0x555557cacc30, ptr=0x555557cd53d0)
    at %path%/ginkgo/include/ginkgo/core/base/executor.hpp:509
#6  0x00005555559c411e in gko::executor_deleter<double []>::operator() (this=0x555557cd7520, ptr=0x555557cd53d0)
    at %path%/ginkgo/include/ginkgo/core/base/executor.hpp:744
#7  0x00005555559c0f04 in std::_Function_handler<void (double*), gko::executor_deleter<double []> >::_M_invoke(std::_Any_data const&, double*&&) (__functor=..., __args#0=@0x7fffffff90e0: 0x555557cd53d0)
    at /usr/include/c++/9/bits/std_function.h:300
#8  0x00005555559b0425 in std::function<void (double*)>::operator()(double*) const (this=0x555557ceb5e8,
    __args#0=0x555557cd53d0) at /usr/include/c++/9/bits/std_function.h:688
#9  0x00005555559acfb1 in std::unique_ptr<double [], std::function<void (double*)> >::~unique_ptr() (
    this=0x555557ceb5e8, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/unique_ptr.h:559
#10 0x00005555559aa5bc in gko::Array<double>::~Array (this=0x555557ceb5e0, __in_chrg=<optimized out>)
    at %path%/ginkgo/include/ginkgo/core/base/array.hpp:84
#11 0x00005555559b28e0 in gko::matrix::Dense<double>::~Dense (this=0x555557ceb4f0, __in_chrg=<optimized out>)
    at %path%/ginkgo/include/ginkgo/core/matrix/dense.hpp:91
#12 0x00005555559b2bba in gko::matrix::Dense<double>::~Dense (this=0x555557ceb4f0, __in_chrg=<optimized out>)
    at %path%/ginkgo/include/ginkgo/core/matrix/dense.hpp:91
#13 0x00007fffe9b893eb in gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const ()
   from %path%/ginkgo/lib/libginkgo.so.1.3.0
#14 0x00005555559ae0c4 in gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply (this=0x555557cd2c20,
    b=0x555557cb2d90, x=0x555557cb2ed0)
    at %path%/ginkgo/include/ginkgo/core/base/lin_op.hpp:679
#15 0x00005555559a58e2 in (anonymous namespace)::_DOCTEST_ANON_FUNC_2 ()
    at %path%/gko_test.cpp:129
#16 0x00005555555cb271 in doctest::Context::run (this=0x7fffffffa020)
    at %path%/doctest/include/doctest/doctest.h:6291
#17 0x00005555555cbc8e in main (argc=2, argv=0x7fffffffa138)
    at %path%/doctest/include/doctest/doctest.h:6375
#16 0x00005555555cb271 in doctest::Context::run (this=0x7fffffffa020)
    at %path%/doctest/include/doctest/doctest.h:6291
#15 0x00005555559a58e2 in (anonymous namespace)::_DOCTEST_ANON_FUNC_2 ()
    at %path%/gko_test.cpp:129

Frame 15 is:

  solver->apply(gko::lend(lB), gko::lend(lX));   

Valgrind log a bit noised by boost_log warns/errors, but here it is:

valgrind log
==533670== Memcheck, a memory error detector
==533670== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==533670== Using Valgrind-3.15.0-608cb11914-20190413 and LibVEX; rerun with -h for copyright info
==533670== Command: gko_test.out
==533670== Parent PID: 215350
==533670==
--533670--
--533670-- Valgrind options:
--533670--    --leak-check=full
--533670--    --show-leak-kinds=all
--533670--    --track-origins=yes
--533670--    --verbose
--533670--    --log-file=valgrind-out.txt
--533670-- Contents of /proc/version:
--533670--   Linux version 5.8.0-59-generic (buildd@lcy01-amd64-022) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021
--533670--
--533670-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-ssse3-avx-avx2-bmi-f16c-rdrand
--533670-- Page sizes: currently 4096, max supported 4096
--533670-- Valgrind library directory: /usr/lib/x86_64-linux-gnu/valgrind
--533670-- Reading syms from gko_test.cpp
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/ld-2.31.so
--533670--   Considering /usr/lib/x86_64-linux-gnu/ld-2.31.so ..
--533670--   .. CRC mismatch (computed 975d0390 wanted 30bd717f)
--533670--   Considering /lib/x86_64-linux-gnu/ld-2.31.so ..
--533670--   .. CRC mismatch (computed 975d0390 wanted 30bd717f)
--533670--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.31.so ..
--533670--   .. CRC is valid
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux
--533670--    object doesn't have a symbol table
--533670--    object doesn't have a dynamic symbol table
--533670-- Scheduler: using generic scheduler lock implementation.
--533670-- Reading suppressions file: /usr/lib/x86_64-linux-gnu/valgrind/default.supp
==533670== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-533670-by-aborzunov-on-???
==533670== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-533670-by-aborzunov-on-???
==533670== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-533670-by-aborzunov-on-???
==533670==
==533670== TO CONTROL THIS PROCESS USING vgdb (which you probably
==533670== don't want to do, unless you know exactly what you're doing,
==533670== or are doing some strange experiment):
==533670==   /usr/lib/x86_64-linux-gnu/valgrind/../../bin/vgdb --pid=533670 ...command...
==533670==
==533670== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==533670==   /path/to/gdb gko_test.cpp
==533670== and then give GDB the following command
==533670==   target remote | /usr/lib/x86_64-linux-gnu/valgrind/../../bin/vgdb --pid=533670
==533670== --pid is optional if only one valgrind process is running
==533670==
--533670-- REDIR: 0x4022e10 (ld-linux-x86-64.so.2:strlen) redirected to 0x580c9ce2 (???)
--533670-- REDIR: 0x4022be0 (ld-linux-x86-64.so.2:index) redirected to 0x580c9cfc (???)
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_core-amd64-linux.so
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so
--533670--    object doesn't have a symbol table
==533670== WARNING: new redirection conflicts with existing -- ignoring it
--533670--     old: 0x04022e10 (strlen              ) R-> (0000.0) 0x580c9ce2 ???
--533670--     new: 0x04022e10 (strlen              ) R-> (2007.0) 0x0483f060 strlen
--533670-- REDIR: 0x401f5f0 (ld-linux-x86-64.so.2:strcmp) redirected to 0x483ffd0 (strcmp)
--533670-- REDIR: 0x4023370 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4843a20 (mempcpy)
--533670-- Reading syms from %path%/boost/1.75.0/lib/libboost_log.so.1.75.0
--533670-- Reading syms from %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0
--533670-- Reading syms from /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudart.so.11.2.152
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcusparse.so.11.4.1.1152
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
--533670--   Considering /usr/lib/debug/.build-id/e5/4761f7b554d0fcc1562959665d93dffbebdaf0.debug ..
--533670--   .. build-id is valid
--533670-- Reading syms from %path%/ginkgo/lib/libginkgo.so.1.3.0
--533670-- Reading syms from %path%/ginkgo/lib/libginkgo_omp.so.1.3.0
--533670-- Reading syms from %path%/ginkgo/lib/libginkgo_cuda.so.1.3.0
--533670-- Reading syms from %path%/ginkgo/lib/libginkgo_hip.so.1.3.0
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libm-2.31.so
--533670--   Considering /usr/lib/x86_64-linux-gnu/libm-2.31.so ..
--533670--   .. CRC mismatch (computed fcb42c76 wanted f6c95789)
--533670--   Considering /lib/x86_64-linux-gnu/libm-2.31.so ..
--533670--   .. CRC mismatch (computed fcb42c76 wanted f6c95789)
--533670--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/libm-2.31.so ..
--533670--   .. CRC is valid
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libc-2.31.so
--533670--   Considering /usr/lib/x86_64-linux-gnu/libc-2.31.so ..
--533670--   .. CRC mismatch (computed 86b78530 wanted e380f01c)
--533670--   Considering /lib/x86_64-linux-gnu/libc-2.31.so ..
--533670--   .. CRC mismatch (computed 86b78530 wanted e380f01c)
--533670--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.31.so ..
--533670--   .. CRC is valid
--533670-- Reading syms from %path%/boost/1.75.0/lib/libboost_filesystem.so.1.75.0
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/librt-2.31.so
--533670--   Considering /usr/lib/x86_64-linux-gnu/librt-2.31.so ..
--533670--   .. CRC mismatch (computed 7d64f7e7 wanted 7c74e986)
--533670--   Considering /lib/x86_64-linux-gnu/librt-2.31.so ..
--533670--   .. CRC mismatch (computed 7d64f7e7 wanted 7c74e986)
--533670--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/librt-2.31.so ..
--533670--   .. CRC is valid
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libdl-2.31.so
--533670--   Considering /usr/lib/x86_64-linux-gnu/libdl-2.31.so ..
--533670--   .. CRC mismatch (computed b5d487d3 wanted 6ef97e7c)
--533670--   Considering /lib/x86_64-linux-gnu/libdl-2.31.so ..
--533670--   .. CRC mismatch (computed b5d487d3 wanted 6ef97e7c)
--533670--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/libdl-2.31.so ..
--533670--   .. CRC is valid
--533670-- Reading syms from %path%/ginkgo/lib/libginkgo_reference.so.1.3.0
--533670-- Reading syms from /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
--533670--    object doesn't have a symbol table
--533670-- Reading syms from /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043
--533670--    object doesn't have a symbol table
--533670-- REDIR: 0x40231d0 (ld-linux-x86-64.so.2:stpcpy) redirected to 0x4842710 (stpcpy)
--533670-- Reading syms from /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublasLt.so.11.4.1.1043
--533670--    object doesn't have a symbol table
--533670-- REDIR: 0x15843600 (libc.so.6:memmove) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842900 (libc.so.6:strncpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843930 (libc.so.6:strcasecmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842220 (libc.so.6:strcat) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842960 (libc.so.6:rindex) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15844dd0 (libc.so.6:rawmemchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1585fe60 (libc.so.6:wmemchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1585f9a0 (libc.so.6:wcscmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843760 (libc.so.6:mempcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843590 (libc.so.6:bcmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842890 (libc.so.6:strncmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158422d0 (libc.so.6:strcmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158436c0 (libc.so.6:memset) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1585f960 (libc.so.6:wcschr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158427f0 (libc.so.6:strnlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158423b0 (libc.so.6:strcspn) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843980 (libc.so.6:strncasecmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842350 (libc.so.6:strcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843ad0 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158610d0 (libc.so.6:wcsnlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1585f9e0 (libc.so.6:wcscpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158429a0 (libc.so.6:strpbrk) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842280 (libc.so.6:index) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158427b0 (libc.so.6:strlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1584bd20 (libc.so.6:memrchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158439d0 (libc.so.6:strcasecmp_l) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843550 (libc.so.6:memchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1585fab0 (libc.so.6:wcslen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15842c60 (libc.so.6:strspn) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x158438d0 (libc.so.6:stpncpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843870 (libc.so.6:stpcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15844e10 (libc.so.6:strchrnul) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843a20 (libc.so.6:strncasecmp_l) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x15843470 (libc.so.6:strstr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--533670-- REDIR: 0x1592b490 (libc.so.6:__strrchr_avx2) redirected to 0x483ea10 (rindex)
--533670-- REDIR: 0x1583d260 (libc.so.6:malloc) redirected to 0x483b780 (malloc)
--533670-- REDIR: 0x1583ec90 (libc.so.6:calloc) redirected to 0x483dce0 (calloc)
--533670-- REDIR: 0x1583d850 (libc.so.6:free) redirected to 0x483c9d0 (free)
--533670-- REDIR: 0x1592b660 (libc.so.6:__strlen_avx2) redirected to 0x483ef40 (strlen)
--533670-- REDIR: 0x15926fa0 (libc.so.6:__strncmp_avx2) redirected to 0x483f670 (strncmp)
--533670-- REDIR: 0x1592cf30 (libc.so.6:__strncpy_avx2) redirected to 0x483f230 (strncpy)
--533670-- REDIR: 0x159268f0 (libc.so.6:__strpbrk_sse42) redirected to 0x4843da0 (strpbrk)
--533670-- REDIR: 0x15926b60 (libc.so.6:__strcmp_avx2) redirected to 0x483fed0 (strcmp)
--533670-- REDIR: 0x1592b070 (libc.so.6:__strchr_avx2) redirected to 0x483ebf0 (index)
--533670-- REDIR: 0x1592b2a0 (libc.so.6:__strchrnul_avx2) redirected to 0x4843540 (strchrnul)
--533670-- REDIR: 0x1592e670 (libc.so.6:__memcpy_avx_unaligned_erms) redirected to 0x48429f0 (memmove)
--533670-- REDIR: 0x15843120 (libc.so.6:__GI_strstr) redirected to 0x4843ca0 (__strstr_sse2)
--533670-- REDIR: 0x15927c50 (libc.so.6:__memcmp_avx2_movbe) redirected to 0x48421e0 (bcmp)
--533670-- REDIR: 0x15927790 (libc.so.6:__rawmemchr_avx2) redirected to 0x4843580 (rawmemchr)
--533670-- REDIR: 0x1585e560 (libc.so.6:__strstr_sse2_unaligned) redirected to 0x4843c20 (strstr)
--533670-- REDIR: 0x1592eaf0 (libc.so.6:__memset_avx2_unaligned_erms) redirected to 0x48428e0 (memset)
--533670-- REDIR: 0x154feb20 (libstdc++.so.6:operator new(unsigned long)) redirected to 0x483bdf0 (operator new(unsigned long))
--533670-- REDIR: 0x154feb80 (libstdc++.so.6:operator new[](unsigned long)) redirected to 0x483c510 (operator new[](unsigned long))
--533670-- REDIR: 0x154fcda0 (libstdc++.so.6:operator delete[](void*)) redirected to 0x483d6e0 (operator delete[](void*))
--533670-- REDIR: 0x154fcd70 (libstdc++.so.6:operator delete(void*)) redirected to 0x483cf50 (operator delete(void*))
--533670-- REDIR: 0x159274c0 (libc.so.6:__memchr_avx2) redirected to 0x4840050 (memchr)
--533670-- REDIR: 0x154fcd80 (libstdc++.so.6:operator delete(void*, unsigned long)) redirected to 0x483d160 (operator delete(void*, unsigned long))
--533670-- REDIR: 0x15926a30 (libc.so.6:__strspn_sse42) redirected to 0x4843ef0 (strspn)
--533670-- REDIR: 0x159267b0 (libc.so.6:__strcspn_sse42) redirected to 0x4843e10 (strcspn)
--533670-- REDIR: 0x1592e650 (libc.so.6:__mempcpy_avx_unaligned_erms) redirected to 0x4843660 (mempcpy)
==533670== Invalid read of size 8
==533670==    at 0x15A35D61: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b2ce78 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x5755A2: gko::Array<double>::resize_and_reset(unsigned long) (array.hpp:476)
==533670==    by 0x571F8B: gko::Array<double>::operator=(gko::Array<double> const&) (array.hpp:322)
==533670==    by 0x58159A: gko::matrix::Dense<double>::operator=(gko::matrix::Dense<double> const&) (dense.hpp:91)
==533670==    by 0x5815E9: gko::EnablePolymorphicAssignment<gko::matrix::Dense<double>, gko::matrix::Dense<double> >::convert_to(gko::matrix::Dense<double>*) const (polymorphic_object.hpp:623)
==533670==    by 0x580A44: gko::EnablePolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::copy_from_impl(gko::PolymorphicObject const*) (polymorphic_object.hpp:584)
==533670==    by 0x56A885: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::copy_from(gko::PolymorphicObject const*) (polymorphic_object.hpp:326)
==533670==    by 0x566DC3: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::clone(std::shared_ptr<gko::Executor const>) const (polymorphic_object.hpp:315)
==533670==    by 0x5613DB: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::clone() const (polymorphic_object.hpp:321)
==533670==    by 0x55954B: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:112)
==533670==
==533670== Invalid read of size 8
==533670==    at 0x15A35D66: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5b808 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B752A: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== Invalid write of size 8
==533670==    at 0x15A35D6B: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5b808 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B752A: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== Invalid read of size 8
==533670==    at 0x15A34F70: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5ce28 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B755C: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== Invalid read of size 8
==533670==    at 0x15A34F81: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5d938 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B7575: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== Invalid write of size 8
==533670==    at 0x15A34F86: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5d938 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B7575: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670==
==533670== HEAP SUMMARY:
==533670==     in use at exit: 1,136 bytes in 11 blocks
==533670==   total heap usage: 23,821 allocs, 23,810 frees, 2,721,458 bytes allocated
==533670==
==533670== Searching for pointers to 11 not-freed blocks
==533670== Checked 38,170,584 bytes
==533670==
==533670== 8 bytes in 1 blocks are still reachable in loss record 1 of 11
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x15B0D24C: ??? (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==533670==    by 0x15B1DBAA: ??? (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==533670==    by 0x15B0B679: ??? (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==533670==    by 0x4011B89: call_init.part.0 (dl-init.c:72)
==533670==    by 0x4011C90: call_init (dl-init.c:30)
==533670==    by 0x4011C90: _dl_init (dl-init.c:119)
==533670==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==533670==    by 0x1: ???
==533670==    by 0x1FFEFFC4A2: ???
==533670==    by 0x1FFEFFC4BF: ???
==533670==
==533670== 8 bytes in 1 blocks are still reachable in loss record 2 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x48A0C61: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F45C7: boost::log::v2_mt_posix::sources::aux::severity_level<boost::log::v2_mt_posix::trivial::severity_level>::set_value(boost::log::v2_mt_posix::trivial::severity_level) (severity_feature.hpp:137)
==533670==    by 0x2F25FC: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:256)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== 8 bytes in 1 blocks are still reachable in loss record 3 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x48A4E49: boost::log::v2_mt_posix::aux::this_thread::get_id() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x489922D: boost::log::v2_mt_posix::core::implementation::init_thread_data() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x4895D07: boost::log::v2_mt_posix::core::open_record(boost::log::v2_mt_posix::attribute_set const&) (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F4622: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:260)
==533670==    by 0x2F2613: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:257)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== 16 bytes in 1 blocks are still reachable in loss record 4 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x492B623: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0)
==533670==    by 0x48A0C9A: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F45C7: boost::log::v2_mt_posix::sources::aux::severity_level<boost::log::v2_mt_posix::trivial::severity_level>::set_value(boost::log::v2_mt_posix::trivial::severity_level) (severity_feature.hpp:137)
==533670==    by 0x2F25FC: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:256)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== 24 bytes in 1 blocks are still reachable in loss record 5 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x48A0C84: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F45C7: boost::log::v2_mt_posix::sources::aux::severity_level<boost::log::v2_mt_posix::trivial::severity_level>::set_value(boost::log::v2_mt_posix::trivial::severity_level) (severity_feature.hpp:137)
==533670==    by 0x2F25FC: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:256)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== 24 bytes in 1 blocks are still reachable in loss record 6 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x492B481: boost::detail::make_external_thread_data() (in %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0)
==533670==    by 0x492B644: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0)
==533670==    by 0x48A0C9A: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F45C7: boost::log::v2_mt_posix::sources::aux::severity_level<boost::log::v2_mt_posix::trivial::severity_level>::set_value(boost::log::v2_mt_posix::trivial::severity_level) (severity_feature.hpp:137)
==533670==    by 0x2F25FC: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:256)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== 184 bytes in 1 blocks are still reachable in loss record 7 of 11
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x1CD31439: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublasLt.so.11.4.1.1043)
==533670==    by 0x1CD31E3F: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublasLt.so.11.4.1.1043)
==533670==    by 0x4011B89: call_init.part.0 (dl-init.c:72)
==533670==    by 0x4011C90: call_init (dl-init.c:30)
==533670==    by 0x4011C90: _dl_init (dl-init.c:119)
==533670==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==533670==    by 0x1: ???
==533670==    by 0x1FFEFFC4A2: ???
==533670==    by 0x1FFEFFC4BF: ???
==533670==
==533670== 184 bytes in 1 blocks are still reachable in loss record 8 of 11
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x15C1A429: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x15C1AE2F: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x15BE5F0D: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x4011B89: call_init.part.0 (dl-init.c:72)
==533670==    by 0x4011C90: call_init (dl-init.c:30)
==533670==    by 0x4011C90: _dl_init (dl-init.c:119)
==533670==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==533670==    by 0x1: ???
==533670==    by 0x1FFEFFC4A2: ???
==533670==    by 0x1FFEFFC4BF: ???
==533670==
==533670== 184 bytes in 1 blocks are still reachable in loss record 9 of 11
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x15C1A429: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x15C1AC9F: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x15BE5F25: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x4011B89: call_init.part.0 (dl-init.c:72)
==533670==    by 0x4011C90: call_init (dl-init.c:30)
==533670==    by 0x4011C90: _dl_init (dl-init.c:119)
==533670==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==533670==    by 0x1: ???
==533670==    by 0x1FFEFFC4A2: ???
==533670==    by 0x1FFEFFC4BF: ???
==533670==
==533670== 184 bytes in 1 blocks are still reachable in loss record 10 of 11
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x15C1A429: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x15C1AC9F: ??? (in /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcublas.so.11.4.1.1043)
==533670==    by 0x4011B89: call_init.part.0 (dl-init.c:72)
==533670==    by 0x4011C90: call_init (dl-init.c:30)
==533670==    by 0x4011C90: _dl_init (dl-init.c:119)
==533670==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==533670==    by 0x1: ???
==533670==    by 0x1FFEFFC4A2: ???
==533670==    by 0x1FFEFFC4BF: ???
==533670==
==533670== 312 bytes in 1 blocks are still reachable in loss record 11 of 11
==533670==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x492B30B: boost::detail::make_external_thread_data() (in %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0)
==533670==    by 0x492B644: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in %path%/boost/1.75.0/lib/libboost_thread.so.1.75.0)
==533670==    by 0x48A0C9A: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in %path%/boost/1.75.0/lib/libboost_log.so.1.75.0)
==533670==    by 0x2F45C7: boost::log::v2_mt_posix::sources::aux::severity_level<boost::log::v2_mt_posix::trivial::severity_level>::set_value(boost::log::v2_mt_posix::trivial::severity_level) (severity_feature.hpp:137)
==533670==    by 0x2F25FC: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_severity_logger<boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >, boost::log::v2_mt_posix::trivial::severity_level>::open_record_unlocked<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (severity_feature.hpp:256)
==533670==    by 0x2F03F6: boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> > const&) (basic_logger.hpp:463)
==533670==    by 0x558E64: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:79)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== LEAK SUMMARY:
==533670==    definitely lost: 0 bytes in 0 blocks
==533670==    indirectly lost: 0 bytes in 0 blocks
==533670==      possibly lost: 0 bytes in 0 blocks
==533670==    still reachable: 1,136 bytes in 11 blocks
==533670==         suppressed: 0 bytes in 0 blocks
==533670==
==533670== ERROR SUMMARY: 2080 errors from 6 contexts (suppressed: 0 from 0)
==533670==
==533670== 1 errors in context 1 of 6:
==533670== Invalid write of size 8
==533670==    at 0x15A35D6B: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5b808 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B752A: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670==
==533670== 1 errors in context 2 of 6:
==533670== Invalid read of size 8
==533670==    at 0x15A35D66: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5b808 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B752A: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670==
==533670== 6 errors in context 3 of 6:
==533670== Invalid read of size 8
==533670==    at 0x15A35D61: void gko::kernels::reference::coo::advanced_spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A3879E: void gko::kernels::reference::coo::advanced_spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9D66: gko::matrix::coo::advanced_spmv_operation<gko::matrix::Dense<double> const*, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0E29: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F40CEE: gko::LinOp::apply(gko::LinOp const*, gko::LinOp const*, gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B79A3: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b2ce78 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x5755A2: gko::Array<double>::resize_and_reset(unsigned long) (array.hpp:476)
==533670==    by 0x571F8B: gko::Array<double>::operator=(gko::Array<double> const&) (array.hpp:322)
==533670==    by 0x58159A: gko::matrix::Dense<double>::operator=(gko::matrix::Dense<double> const&) (dense.hpp:91)
==533670==    by 0x5815E9: gko::EnablePolymorphicAssignment<gko::matrix::Dense<double>, gko::matrix::Dense<double> >::convert_to(gko::matrix::Dense<double>*) const (polymorphic_object.hpp:623)
==533670==    by 0x580A44: gko::EnablePolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::copy_from_impl(gko::PolymorphicObject const*) (polymorphic_object.hpp:584)
==533670==    by 0x56A885: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::copy_from(gko::PolymorphicObject const*) (polymorphic_object.hpp:326)
==533670==    by 0x566DC3: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::clone(std::shared_ptr<gko::Executor const>) const (polymorphic_object.hpp:315)
==533670==    by 0x5613DB: gko::EnableAbstractPolymorphicObject<gko::matrix::Dense<double>, gko::LinOp>::clone() const (polymorphic_object.hpp:321)
==533670==    by 0x55954B: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:112)
==533670==
==533670==
==533670== 259 errors in context 4 of 6:
==533670== Invalid write of size 8
==533670==    at 0x15A34F86: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5d938 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B7575: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670==
==533670== 259 errors in context 5 of 6:
==533670== Invalid read of size 8
==533670==    at 0x15A34F81: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5d938 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B7575: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670==
==533670== 1554 errors in context 6 of 6:
==533670== Invalid read of size 8
==533670==    at 0x15A34F70: void gko::kernels::reference::coo::spmv2<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x15A385EA: void gko::kernels::reference::coo::spmv<double, int>(std::shared_ptr<gko::ReferenceExecutor const>, gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*) (in %path%/ginkgo/lib/libginkgo_reference.so.1.3.0)
==533670==    by 0x130E9888: gko::matrix::coo::spmv_operation<gko::matrix::Coo<double, int> const*, gko::matrix::Dense<double> const*, gko::matrix::Dense<double>*>::run(std::shared_ptr<gko::ReferenceExecutor const>) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x55BB8C: gko::ReferenceExecutor::run(gko::Operation const&) const (executor.hpp:892)
==533670==    by 0x130F0CDD: gko::matrix::Coo<double, int>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x12F52118: gko::LinOp::apply(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x133B7EDC: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==  Address 0x28b5ce28 is 0 bytes after a block of size 2,072 alloc'd
==533670==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==533670==    by 0x13802AD9: gko::OmpExecutor::raw_alloc(unsigned long) const (in %path%/ginkgo/lib/libginkgo_omp.so.1.3.0)
==533670==    by 0x578561: double* gko::Executor::alloc<double>(unsigned long) const (executor.hpp:492)
==533670==    by 0x58BAB1: gko::Array<double>::Array(std::shared_ptr<gko::Executor const>, unsigned long) (array.hpp:144)
==533670==    by 0x58C4F5: gko::matrix::Dense<double>::Dense(std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long) (dense.hpp:460)
==533670==    by 0x587D25: std::unique_ptr<gko::matrix::Dense<double>, std::default_delete<gko::matrix::Dense<double> > > gko::EnableCreateMethod<gko::matrix::Dense<double> >::create<std::shared_ptr<gko::Executor const>, gko::dim<2ul, unsigned long> const&, unsigned long>(std::shared_ptr<gko::Executor const>&&, gko::dim<2ul, unsigned long> const&, unsigned long&&) (polymorphic_object.hpp:647)
==533670==    by 0x5811BD: gko::matrix::Dense<double>::create_with_same_config() const (dense.hpp:498)
==533670==    by 0x133B755C: gko::solver::Bicgstab<double>::apply_impl(gko::LinOp const*, gko::LinOp*) const (in %path%/ginkgo/lib/libginkgo.so.1.3.0)
==533670==    by 0x5620C3: gko::EnableLinOp<gko::solver::Bicgstab<double>, gko::LinOp>::apply(gko::LinOp const*, gko::LinOp*) (lin_op.hpp:679)
==533670==    by 0x5598E1: (anonymous namespace)::_DOCTEST_ANON_FUNC_2() (austenite-CROS.cpp:129)
==533670==    by 0x17F270: doctest::Context::run() (doctest.h:6291)
==533670==    by 0x17FC8D: main (doctest.h:6375)
==533670==
==533670== ERROR SUMMARY: 2080 errors from 6 contexts (suppressed: 0 from 0)

@upsj
Copy link
Member

upsj commented Jul 5, 2021

I have a suspicion what might be going wrong: the .mtx format uses one-based indexing, but everything else related to Ginkgo uses zero-based indexing, so your JSON input looks to be off-by-one. It sounds like you are reading/writing one entry past your vector storage, but CUDA doesn't catch these barely out of bounds accesses. If you want to verify this, try running with CudaExecutor under cuda-memcheck (older GPU/CUDA) or compute-sanitizer (newer GPU/CUDA)

@upsj
Copy link
Member

upsj commented Jul 5, 2021

This would be a good use case for #746 / #770

@aborzunov
Copy link
Author

aborzunov commented Jul 6, 2021

Worth noting, my example finishes correctly during Valgrind session and fails with `munmap_chunk(): invalid pointer

I have a suspicion what might be going wrong: the .mtx format uses one-based indexing, but everything else related to Ginkgo uses zero-based indexing, so your JSON input looks to be off-by-one. It sounds like you are reading/writing one entry past your vector storage, but CUDA doesn't catch these barely out of bounds accesses. If you want to verify this, try running with CudaExecutor under cuda-memcheck (older GPU/CUDA) or compute-sanitizer (newer GPU/CUDA)

Yes, the reason was in off-by-one error in json-s. compute-sanitizer indeed detected an error.

After changing indexation error, I obtain expected behaviour. Thank you!

@upsj
Copy link
Member

upsj commented Jul 6, 2021

I'm glad you were able to fix it :) Yes, I would assume that is an artifact of how allocation data structures work on Linux - the allocation metadata is stored directly adjacent to the allocated blocks, so if you write out-of-bounds, you destroy these data structures. valgrind prevents the overwrite, and since this was the only issue in the code, everything else works fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
is:bug Something looks wrong.
Projects
None yet
Development

No branches or pull requests

2 participants