| // This file is part of Eigen, a lightweight C++ template library |
| // for linear algebra. |
| // |
| // Copyright (C) 2016 Benoit Steiner <benoit.steiner.goog@gmail.com> |
| // |
| // This Source Code Form is subject to the terms of the Mozilla |
| // Public License v. 2.0. If a copy of the MPL was not distributed |
| // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| #ifndef EIGEN_THREADPOOL_MODULE_H |
| #define EIGEN_THREADPOOL_MODULE_H |
| |
| #include "Core" |
| |
| #include "src/Core/util/DisableStupidWarnings.h" |
| |
| /** \defgroup ThreadPool_Module ThreadPool Module |
| * |
| * This module provides 2 threadpool implementations |
| * - a simple reference implementation |
| * - a faster non blocking implementation |
| * |
| * \code |
| * #include <Eigen/ThreadPool> |
| * \endcode |
| */ |
| |
| #include <cstddef> |
| #include <cstring> |
| #include <time.h> |
| |
| #include <vector> |
| #include <atomic> |
| #include <condition_variable> |
| #include <deque> |
| #include <mutex> |
| #include <thread> |
| #include <functional> |
| #include <memory> |
| #include <utility> |
| |
| // There are non-parenthesized calls to "max" in the <unordered_map> header, |
| // which trigger a check in test/main.h causing compilation to fail. |
| // We work around the check here by removing the check for max in |
| // the case where we have to emulate thread_local. |
| #ifdef max |
| #undef max |
| #endif |
| #include <unordered_map> |
| |
| #include "src/Core/util/Meta.h" |
| #include "src/Core/util/MaxSizeVector.h" |
| |
| #ifdef EIGEN_USE_CUSTOM_THREAD_POOL |
| #ifndef EIGEN_MUTEX |
| #define EIGEN_MUTEX std::mutex |
| #endif |
| #ifndef EIGEN_MUTEX_LOCK |
| #define EIGEN_MUTEX_LOCK std::unique_lock<std::mutex> |
| #endif |
| #ifndef EIGEN_CONDVAR |
| #define EIGEN_CONDVAR std::condition_variable |
| #endif |
| #else |
| // Use tensorflow synchronization primitives. |
| #if !defined(EIGEN_MUTEX) || !defined(EIGEN_MUTEX_LOCK) || !defined(EIGEN_CONDVAR) |
| #include "third_party/tensorflow/tsl/platform/mutex.h" |
| #endif |
| #ifndef EIGEN_MUTEX |
| #define EIGEN_MUTEX ::tsl::mutex |
| #endif |
| #ifndef EIGEN_MUTEX_LOCK |
| #define EIGEN_MUTEX_LOCK ::tsl::mutex_lock |
| #endif |
| #ifndef EIGEN_CONDVAR |
| #define EIGEN_CONDVAR ::tsl::condition_variable |
| #endif |
| #endif |
| |
| |
| // IWYU pragma: begin_exports |
| #include "src/ThreadPool/ThreadLocal.h" |
| #include "src/ThreadPool/ThreadYield.h" |
| #include "src/ThreadPool/ThreadCancel.h" |
| #include "src/ThreadPool/EventCount.h" |
| #include "src/ThreadPool/RunQueue.h" |
| #include "src/ThreadPool/ThreadPoolInterface.h" |
| #include "src/ThreadPool/ThreadEnvironment.h" |
| #include "src/ThreadPool/Barrier.h" |
| #include "src/ThreadPool/NonBlockingThreadPool.h" |
| #include "src/ThreadPool/CoreThreadPoolDevice.h" |
| // IWYU pragma: end_exports |
| |
| #include "src/Core/util/ReenableStupidWarnings.h" |
| |
| #endif // EIGEN_CXX11_THREADPOOL_MODULE_H |