From 221f83117c95ccca82190ca798deb61ecd347f97 Mon Sep 17 00:00:00 2001 From: Daniel Rosel Date: Mon, 13 Jan 2025 13:30:48 +0100 Subject: [PATCH] simple parallelizatoin --- CMakeLists.txt | 6 ++++++ src/search.cpp | 2 ++ tests/tests.cpp | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac17836..02f37cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,12 @@ add_library(symphony SHARED target_include_directories(symphony PUBLIC include) +# add openmp +find_package(OpenMP) +if(OpenMP_CXX_FOUND) + target_link_libraries(symphony PUBLIC OpenMP::OpenMP_CXX) +endif() + enable_testing() add_subdirectory(tests) diff --git a/src/search.cpp b/src/search.cpp index fe95111..87f5c74 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -7,6 +7,7 @@ #include #include #include +#include Search *create_search(SearchAlgorithmIndex search_algorithm_index, Problem *problem) { @@ -60,6 +61,7 @@ std::shared_ptr BreadthFirstSearch::search() { if (problem->goal_test(state)) { return node; } + #pragma omp parallel for shared(frontier) schedule(dynamic) if (frontier.size() > 1000) for (const auto &action : problem->actions(node->state)) { auto child = std::make_shared( std::shared_ptr(node), diff --git a/tests/tests.cpp b/tests/tests.cpp index e403853..559a2d7 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -1,6 +1,7 @@ #include #include "definitions.h" #include "search.h" +#include class TestState : public State { public: @@ -18,7 +19,7 @@ class TestProblem : public Problem { } bool goal_test(State *state) override { auto *test_state = dynamic_cast(state); - return test_state->value == 10; + return test_state->value == 10010; } std::vector> actions(std::shared_ptr state) override { auto test_state = std::dynamic_pointer_cast(state); @@ -28,7 +29,7 @@ class TestProblem : public Problem { } double heuristic(State *state) override { auto *test_state = dynamic_cast(state); - return 10 - test_state->value; + return 10010 - test_state->value; } }; @@ -40,18 +41,24 @@ TEST(Definitions, State) { TEST(Search, AStarSearch) { TestProblem problem; Search *search = create_search(SearchAlgorithmIndex::A_STAR, &problem); + double start = omp_get_wtime(); std::shared_ptr node = search->search(); + double end = omp_get_wtime(); + std::cout << "Time: " << end - start << std::endl; ASSERT_NE(node, nullptr); - EXPECT_EQ(dynamic_cast(node->state.get())->value, 10); + EXPECT_EQ(dynamic_cast(node->state.get())->value, 10010); delete search; } TEST(Search, BreadthFirstSearch) { TestProblem problem; Search *search = create_search(SearchAlgorithmIndex::BREADTH_FIRST_SEARCH, &problem); + double start = omp_get_wtime(); std::shared_ptr node = search->search(); + double end = omp_get_wtime(); + std::cout << "Time: " << end - start << std::endl; ASSERT_NE(node, nullptr); - EXPECT_EQ(dynamic_cast(node->state.get())->value, 10); + EXPECT_EQ(dynamic_cast(node->state.get())->value, 10010); delete search; } @@ -60,7 +67,7 @@ TEST(Search, BeamSearch) { Search *search = create_search(SearchAlgorithmIndex::BEAM_SEARCH, &problem); std::shared_ptr node = search->search(); ASSERT_NE(node, nullptr); - EXPECT_EQ(dynamic_cast(node->state.get())->value, 10); + EXPECT_EQ(dynamic_cast(node->state.get())->value, 10010); delete search; }