Extract ThreadPool into a separate file.
Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
namespace exec
{
-ThreadPool::ThreadPool(uint32_t num_threads)
-{
- assert(num_threads >= 1);
-
- for (uint32_t i = 0; i < num_threads; i++)
- {
- _threads.emplace_back(std::ref(_worker));
- }
-}
-
-ThreadPool::~ThreadPool()
-{
- if (!_threads.empty())
- {
- _worker.terminate();
- join();
- }
-}
-
-void ThreadPool::enqueue(std::unique_ptr<IFunction> &&fn) { _worker.enqueue(std::move(fn)); }
-
-uint32_t ThreadPool::numJobsInQueue() { return _worker.numJobsInQueue(); }
-
-void ThreadPool::join()
-{
- for (auto &thread : _threads)
- {
- thread.join();
- }
- _threads.clear();
-}
-
-void ThreadPool::finish()
-{
- _worker.finish();
- join();
-}
-
ParallelScheduler::ParallelScheduler(const graph::BackendSet &backends)
{
assert(!backends.empty());
#define __NEURUN_EXEC_PARALLEL_SCHEDULER_H__
#include <unordered_map>
-#include <thread>
#include <memory>
-#include <queue>
-#include <vector>
-#include <unordered_set>
#include "exec/IFunction.h"
#include "graph/BackendSet.h"
-#include "WorkQueue.h"
+#include "ThreadPool.h"
namespace neurun
{
namespace exec
{
-// TODO Extract this class to a separate file
-class ThreadPool
-{
-public:
- /**
- * @brief Coustruct ThreadPool object
- *
- * @param num_threads Number of threads
- */
- ThreadPool(uint32_t num_threads = 1);
- /**
- * @brief Destroy ThreadPool object
- */
- ~ThreadPool();
- /**
- * @brief Enqueue a function
- *
- * @param fn A function to be queued
- */
- void enqueue(std::unique_ptr<IFunction> &&fn);
- /**
- * @brief Get number of jobs in worker's queue
- *
- * @return Number of jobs
- */
- uint32_t numJobsInQueue();
-
- /**
- * @brief Block until all jobs are finished
- */
- void finish();
-
-private:
- void join();
-
-private:
- WorkQueue _worker;
- std::vector<std::thread> _threads;
-};
-
class ParallelScheduler
{
public:
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ThreadPool.h"
+
+#include <cassert>
+
+namespace neurun
+{
+namespace exec
+{
+
+ThreadPool::ThreadPool(uint32_t num_threads)
+{
+ assert(num_threads >= 1);
+
+ for (uint32_t i = 0; i < num_threads; i++)
+ {
+ _threads.emplace_back(std::ref(_worker));
+ }
+}
+
+ThreadPool::~ThreadPool()
+{
+ if (!_threads.empty())
+ {
+ _worker.terminate();
+ join();
+ }
+}
+
+void ThreadPool::enqueue(std::unique_ptr<IFunction> &&fn) { _worker.enqueue(std::move(fn)); }
+
+uint32_t ThreadPool::numJobsInQueue() { return _worker.numJobsInQueue(); }
+
+void ThreadPool::join()
+{
+ for (auto &thread : _threads)
+ {
+ thread.join();
+ }
+ _threads.clear();
+}
+
+void ThreadPool::finish()
+{
+ _worker.finish();
+ join();
+}
+
+} // namespace exec
+} // namespace neurun
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __NEURUN_EXEC_THREAD_POOL_H__
+#define __NEURUN_EXEC_THREAD_POOL_H__
+
+#include <thread>
+#include <memory>
+#include <vector>
+
+#include "WorkQueue.h"
+
+namespace neurun
+{
+namespace exec
+{
+
+class ThreadPool
+{
+public:
+ /**
+ * @brief Coustruct ThreadPool object
+ *
+ * @param num_threads Number of threads
+ */
+ ThreadPool(uint32_t num_threads = 1);
+ /**
+ * @brief Destroy ThreadPool object
+ */
+ ~ThreadPool();
+ /**
+ * @brief Enqueue a function
+ *
+ * @param fn A function to be queued
+ */
+ void enqueue(std::unique_ptr<IFunction> &&fn);
+ /**
+ * @brief Get number of jobs in worker's queue
+ *
+ * @return Number of jobs
+ */
+ uint32_t numJobsInQueue();
+
+ /**
+ * @brief Block until all jobs are finished
+ */
+ void finish();
+
+private:
+ void join();
+
+private:
+ WorkQueue _worker;
+ std::vector<std::thread> _threads;
+};
+
+} // namespace exec
+} // namespace neurun
+
+#endif // __NEURUN_EXEC_THREAD_POOL_H__