Skip to content

Commit

Permalink
Move Legion initialization test into general intialize/finalize testing
Browse files Browse the repository at this point in the history
  • Loading branch information
dalg24 committed Dec 27, 2024
1 parent 97e2f9a commit a973955
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 28 deletions.
3 changes: 1 addition & 2 deletions core/unit_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -909,14 +909,13 @@ endif()

kokkos_add_executable_and_test(CoreUnitTest_Default SOURCES ${DEFAULT_DEVICE_SOURCES})

kokkos_add_executable_and_test(CoreUnitTest_LegionInitialization SOURCES UnitTestMain.cpp TestLegionInitialization.cpp)

kokkos_add_executable_and_test(
CoreUnitTest_InitializeFinalize
SOURCES
UnitTestMain.cpp
TestInitializationSettings.cpp
TestInitializeFinalize.cpp
TestLegionInitialization.cpp
TestParseCmdLineArgsAndEnvVars.cpp
TestPushFinalizeHook.cpp
TestScopeGuard.cpp
Expand Down
69 changes: 43 additions & 26 deletions core/unit_test/TestLegionInitialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,17 @@
//@HEADER

#include <Kokkos_Core.hpp>

#include <gtest/gtest.h>

#include <cstdlib>

#include "KokkosExecutionEnvironmentNeverInitializedFixture.hpp"

namespace {

using Legion_DeathTest = KokkosExecutionEnvironmentNeverInitialized;

struct ReductionFunctor {
Kokkos::View<int*> d;

Expand All @@ -27,39 +34,49 @@ struct ReductionFunctor {

// The purpose of this test is to mimic Legion's use case of initializing and
// finalizing individual backends
TEST(initialization, legion_initialization) {
Kokkos::InitializationSettings kokkos_init_settings;
TEST(Legion_DeathTest, individual_backend_initialization) {
::testing::FLAGS_gtest_death_test_style = "threadsafe";

EXPECT_EXIT(
{
bool success = true;
Kokkos::InitializationSettings kokkos_init_settings;

Kokkos::Impl::pre_initialize(kokkos_init_settings);
Kokkos::Impl::pre_initialize(kokkos_init_settings);

// We need to have a host execution space initialized first.
Kokkos::DefaultHostExecutionSpace::impl_initialize(kokkos_init_settings);
// We need to have a host execution space initialized first.
Kokkos::DefaultHostExecutionSpace::impl_initialize(
kokkos_init_settings);

if (!std::is_same_v<Kokkos::DefaultExecutionSpace,
Kokkos::DefaultHostExecutionSpace>)
Kokkos::DefaultExecutionSpace::impl_initialize(kokkos_init_settings);
if (!std::is_same_v<Kokkos::DefaultExecutionSpace,
Kokkos::DefaultHostExecutionSpace>)
Kokkos::DefaultExecutionSpace::impl_initialize(kokkos_init_settings);

Kokkos::Impl::post_initialize(kokkos_init_settings);
Kokkos::Impl::post_initialize(kokkos_init_settings);

EXPECT_TRUE(Kokkos::is_initialized());
success &= Kokkos::is_initialized();

{
Kokkos::View<int*> d("d", 1000);
Kokkos::deep_copy(d, 1);
int result;
Kokkos::parallel_reduce("TestRed", d.extent(0), ReductionFunctor{d},
result);
EXPECT_EQ(result, d.extent_int(0));
}
{
Kokkos::View<int*> d("d", 1000);
Kokkos::deep_copy(d, 1);
int result;
Kokkos::parallel_reduce("TestRed", d.extent(0), ReductionFunctor{d},
result);
success &= (result == d.extent_int(0));
}

Kokkos::Impl::pre_finalize();
if (!std::is_same_v<Kokkos::DefaultExecutionSpace,
Kokkos::DefaultHostExecutionSpace>)
Kokkos::DefaultExecutionSpace::impl_finalize();
Kokkos::DefaultHostExecutionSpace::impl_finalize();
Kokkos::Impl::post_finalize();
Kokkos::Impl::pre_finalize();
if (!std::is_same_v<Kokkos::DefaultExecutionSpace,
Kokkos::DefaultHostExecutionSpace>)
Kokkos::DefaultExecutionSpace::impl_finalize();
Kokkos::DefaultHostExecutionSpace::impl_finalize();
Kokkos::Impl::post_finalize();

EXPECT_FALSE(Kokkos::is_initialized());
EXPECT_TRUE(Kokkos::is_finalized());
success &= !Kokkos::is_initialized();
success &= Kokkos::is_finalized();
std::exit(success ? EXIT_SUCCESS : EXIT_FAILURE);
},
::testing::ExitedWithCode(EXIT_SUCCESS), "");
}

} // namespace

0 comments on commit a973955

Please sign in to comment.