Skip to content

Segfault from tests #790

Open
Open
@tpadioleau

Description

@tpadioleau

In the following setup:

  • File sum.hpp
#pragma once

#include <ddc/ddc.hpp>

struct DDimX
{
};

inline int sum(ddc::ChunkSpan<
               const int,
               ddc::DiscreteDomain<DDimX>,
               Kokkos::layout_right,
               Kokkos::DefaultExecutionSpace::memory_space> const& chk_span)
{
    return ddc::parallel_transform_reduce(
            chk_span.domain(),
            0,
            ddc::reducer::sum<int>(),
            KOKKOS_LAMBDA(ddc::DiscreteElement<DDimX> const ix) { return chk_span(ix); });
}
  • File sum_version_a.cpp
#include <ddc/ddc.hpp>

#include <gtest/gtest.h>

#include "sum.hpp"

TEST(SumVersionA, Small)
{
    ddc::DiscreteVector<DDimX> const n(10);
    ddc::DiscreteDomain<DDimX> const gridvx = ddc::init_trivial_space(n);

    ddc::Chunk quadrature_coeffs(gridvx, ddc::DeviceAllocator<int>());
    ddc::parallel_fill(quadrature_coeffs, 1);

    EXPECT_EQ(sum(quadrature_coeffs.span_cview()), n.value());
}
  • File sum_version_b.cpp
#include <ddc/ddc.hpp>

#include <gtest/gtest.h>

#include "sum.hpp"

TEST(SumVersionB, Small)
{
    ddc::DiscreteVector<DDimX> const n(10);
    ddc::DiscreteDomain<DDimX> const gridvx = ddc::init_trivial_space(n);

    ddc::Chunk quadrature_coeffs(gridvx, ddc::DeviceAllocator<int>());
    ddc::parallel_fill(quadrature_coeffs, 1);

    EXPECT_EQ(sum(quadrature_coeffs.span_cview()), n.value());
}

Compiled with the following CMakeLists.txt

cmake_minimum_required(VERSION 3.22)

include(GoogleTest)

add_executable(reproducer
    sum_version_a.cpp
    sum_version_b.cpp
    ../main.cpp
)

target_link_libraries(reproducer
    PUBLIC
        GTest::gtest
        DDC::core
)

gtest_discover_tests(reproducer DISCOVERY_MODE PRE_TEST)

We have a segfault if we run the tests with ctest but not with the executable with the following backtrace:

#0  0x0000000000000000 in ?? ()
#1  0x00000000004133b6 in __nv_hdl_wrapper_t<false, false, false, __nv_dl_tag<int (*)(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&), &(sum(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&)), 1u>, int(ddc::DiscreteElement<DDimX>), ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const>::__nv_hdl_wrapper_t (in=..., this=0x7fffffffbcb8) at nvcc_internal_extended_lambda_implementation:253
#2  ddc::detail::TransformReducerKokkosLambdaAdapter<ddc::reducer::sum<int>, __nv_hdl_wrapper_t<false, false, false, __nv_dl_tag<int (*)(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&), &(sum(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&)), 1u>, int(ddc::DiscreteElement<DDimX>), ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const>, ddc::DiscreteDomain<DDimX>, std::integer_sequence<unsigned long, 0ul> >::TransformReducerKokkosLambdaAdapter (support=..., f=..., r=..., this=0x7fffffffbcb0) at /home/TP026749/ddc/include/ddc/parallel_transform_reduce.hpp:107
#3  ddc::detail::transform_reduce_kokkos<Kokkos::Cuda, ddc::DiscreteDomain<DDimX>, int, ddc::reducer::sum<int>, __nv_hdl_wrapper_t<false, false, false, __nv_dl_tag<int (*)(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&), &(sum(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&)), 1u>, int(ddc::DiscreteElement<DDimX>), ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const> > (label=..., execution_space=..., 
    domain=..., neutral=neutral@entry=0, reduce=..., transform=...) at /home/TP026749/ddc/include/ddc/parallel_transform_reduce.hpp:149
#4  0x000000000041358c in ddc::parallel_transform_reduce<Kokkos::Cuda, ddc::DiscreteDomain<DDimX>, int, ddc::reducer::sum<int>, __nv_hdl_wrapper_t<false, false, false, __nv_dl_tag<int (*)(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&), &(sum(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&)), 1u>, int(ddc::DiscreteElement<DDimX>), ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const> > (transform=..., 
    reduce=..., neutral=0, domain=..., execution_space=..., label=...) at /home/TP026749/ddc/include/ddc/parallel_transform_reduce.hpp:182
#5  ddc::parallel_transform_reduce<ddc::DiscreteDomain<DDimX>, int, ddc::reducer::sum<int>, __nv_hdl_wrapper_t<false, false, false, __nv_dl_tag<int (*)(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&), &(sum(ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const&)), 1u>, int(ddc::DiscreteElement<DDimX>), ddc::ChunkSpan<int const, ddc::DiscreteDomain<DDimX>, Kokkos::layout_right, Kokkos::CudaSpace> const> > (domain=..., neutral=neutral@entry=0, reduce=..., 
    transform=...) at /home/TP026749/ddc/include/ddc/parallel_transform_reduce.hpp:258
#6  0x0000000000413def in sum (chk_span=...) at /home/TP026749/ddc/tests/nvcc_reproducer/sum.hpp:19
#7  SumVersionB_Small_Test::TestBody (this=<optimized out>) at /home/TP026749/ddc/tests/nvcc_reproducer/sum_version_b.cpp:19
#8  0x00007ffff5b5e2dd in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ()
   from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#9  0x00007ffff5b3fffe in testing::Test::Run() () from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#10 0x00007ffff5b401b5 in testing::TestInfo::Run() () from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#11 0x00007ffff5b4046d in testing::TestSuite::Run() () from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#12 0x00007ffff5b548c1 in testing::internal::UnitTestImpl::RunAllTests() ()
   from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#13 0x00007ffff5b40544 in testing::UnitTest::Run() () from /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/lib64/libgtest.so.1.14.0
#14 0x00000000004147c0 in RUN_ALL_TESTS () at /data/gyselarunner/spack-0.23.0/var/spack/environments/gyselalibxx-env-cuda-candidate/.spack-env/view/include/gtest/gtest.h:2317
#15 main (argc=<optimized out>, argv=0x7fffffffc1d8) at /home/TP026749/ddc/tests/main.cpp:16

This happened with gcc@12, cuda@12 and with at least O1 optimisation enabled.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions