/** * \file dnn/test/cpu/task_executor.cpp * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") * * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ #include "src/naive/handle.h" #include "test/common/utils.h" #include "test/cpu/fixture.h" using namespace megdnn; using namespace test; TEST_F(CPU_MULTI_THREADS, THREAD_POOL) { auto single_thread_handle = create_cpu_handle(0); std::vector data(100, 0); std::vector result_singel_thread(100); std::vector result_multi_thread(100); for (int i = 0; i < 100; i++) { data[i] = i; } auto single_run = [&data, &result_singel_thread]() { for (int i = 0; i < 100; i++) { result_singel_thread[i] = data[i]; } }; auto multi_thread_run = [&data, &result_multi_thread](size_t index, size_t) { for (size_t i = index * 5; i < (index + 1) * 5; i++) { result_multi_thread[i] = data[i]; } }; MEGDNN_DISPATCH_CPU_KERN( static_cast(single_thread_handle.get()), single_run()); MEGDNN_DISPATCH_MULTI_THREAD_CPU_KERN( static_cast(handle()), 20, multi_thread_run); for (int i = 0; i < 100; i++) { ASSERT_EQ(result_singel_thread[i], result_multi_thread[i]); } } // vim: syntax=cpp.doxygen