FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include #include #include // ---------------------------------------------------------------------------- // Parallel Transform 1 // ---------------------------------------------------------------------------- template void parallel_transform(size_t W) { std::srand(static_cast(time(NULL))); tf::Taskflow taskflow; tf::Executor executor(W); for(size_t N=0; N string { return myFunction(x.second); }, P()); subflow.join(); }); from.precede(to_ref); from.precede(to_tgt); executor.run(taskflow).wait(); /** Target entries much match. */ REQUIRE(std::equal(tgt.begin(), tgt.end(), ref.begin())); } } // guided TEST_CASE("ParallelTransform3.Guided.1thread") { parallel_transform3(1); parallel_transform3(1); } TEST_CASE("ParallelTransform3.Guided.2threads") { parallel_transform3(2); parallel_transform3(2); } TEST_CASE("ParallelTransform3.Guided.3threads") { parallel_transform3(3); parallel_transform3(3); } TEST_CASE("ParallelTransform3.Guided.4threads") { parallel_transform3(4); parallel_transform3(4); } // dynamic TEST_CASE("ParallelTransform3.Dynamic.1thread") { parallel_transform3(1); parallel_transform3(1); } TEST_CASE("ParallelTransform3.Dynamic.2threads") { parallel_transform3(2); parallel_transform3(2); } TEST_CASE("ParallelTransform3.Dynamic.3threads") { parallel_transform3(3); parallel_transform3(3); } TEST_CASE("ParallelTransform3.Dynamic.4threads") { parallel_transform3(4); parallel_transform3(4); } // static TEST_CASE("ParallelTransform3.Static.1thread") { parallel_transform3(1); parallel_transform3(1); } TEST_CASE("ParallelTransform3.Static.2threads") { parallel_transform3(2); parallel_transform3(2); } TEST_CASE("ParallelTransform3.Static.3threads") { parallel_transform3(3); parallel_transform3(3); } TEST_CASE("ParallelTransform3.Static.4threads") { parallel_transform3(4); parallel_transform3(4); } // random TEST_CASE("ParallelTransform3.Random.1thread") { parallel_transform3(1); parallel_transform3(1); } TEST_CASE("ParallelTransform3.Random.2threads") { parallel_transform3(2); parallel_transform3(2); } TEST_CASE("ParallelTransform3.Random.3threads") { parallel_transform3(3); parallel_transform3(3); } TEST_CASE("ParallelTransform3.Random.4threads") { parallel_transform3(4); parallel_transform3(4); } // ---------------------------------------------------------------------------- // Closure Wrapper // ---------------------------------------------------------------------------- int& GetThreadSpecificContext() { thread_local int context = 0; return context; } const int UPPER = 1000; TEST_CASE("ClosureWrapper.transform.Static" * doctest::timeout(300)) { // Write a test case for using the taskwrapper on tf::transform for (int tc = 1; tc < 16; tc++) { tf::Executor executor(tc); std::atomic wrapper_called_count = 0; tf::Taskflow taskflow; std::vector range(UPPER, 0); std::vector result(UPPER); taskflow.transform(range.begin(), range.end(), begin(result), [&](int) { return GetThreadSpecificContext(); }, tf::StaticPartitioner(1, [&](auto&& task){ wrapper_called_count++; GetThreadSpecificContext() = tc; task(); GetThreadSpecificContext() = 0; }) ); executor.run(taskflow).wait(); REQUIRE(wrapper_called_count == tc); REQUIRE(result == std::vector(UPPER, tc)); } } // Implement for dynamic case for transform TEST_CASE("ClosureWrapper.transform.Dynamic" * doctest::timeout(300)) { for (int tc = 1; tc < 16; tc++) { tf::Executor executor(tc); std::atomic wrapper_called_count = 0; tf::Taskflow taskflow; std::vector range(UPPER); std::iota(range.begin(), range.end(), 0); std::vector result(UPPER); taskflow.transform(range.begin(), range.end(), begin(result), [&](int){ return GetThreadSpecificContext(); }, tf::DynamicPartitioner(1, [&](auto&& task) { wrapper_called_count++; GetThreadSpecificContext() = tc; task(); GetThreadSpecificContext() = 0; }) ); executor.run(taskflow).wait(); REQUIRE(wrapper_called_count

Back | FazBrowse Home | New Git URL