Open
Description
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
Labels
No labels