1*5f39d1b3SJooyung Han // Copyright 2016 The Gemmlowp Authors. All Rights Reserved. 2*5f39d1b3SJooyung Han // 3*5f39d1b3SJooyung Han // Licensed under the Apache License, Version 2.0 (the "License"); 4*5f39d1b3SJooyung Han // you may not use this file except in compliance with the License. 5*5f39d1b3SJooyung Han // You may obtain a copy of the License at 6*5f39d1b3SJooyung Han // 7*5f39d1b3SJooyung Han // http://www.apache.org/licenses/LICENSE-2.0 8*5f39d1b3SJooyung Han // 9*5f39d1b3SJooyung Han // Unless required by applicable law or agreed to in writing, software 10*5f39d1b3SJooyung Han // distributed under the License is distributed on an "AS IS" BASIS, 11*5f39d1b3SJooyung Han // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*5f39d1b3SJooyung Han // See the License for the specific language governing permissions and 13*5f39d1b3SJooyung Han // limitations under the License. 14*5f39d1b3SJooyung Han 15*5f39d1b3SJooyung Han #ifndef GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 16*5f39d1b3SJooyung Han #define GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 17*5f39d1b3SJooyung Han 18*5f39d1b3SJooyung Han #include "../internal/multi_thread_gemm.h" 19*5f39d1b3SJooyung Han 20*5f39d1b3SJooyung Han namespace gemmlowp { 21*5f39d1b3SJooyung Han namespace meta { 22*5f39d1b3SJooyung Han ResolveMaxThreads(int max_threads)23*5f39d1b3SJooyung Haninline int ResolveMaxThreads(int max_threads) { 24*5f39d1b3SJooyung Han if (max_threads == 0) { 25*5f39d1b3SJooyung Han #ifdef _WIN32 26*5f39d1b3SJooyung Han SYSTEM_INFO sysinfo; 27*5f39d1b3SJooyung Han GetSystemInfo(&sysinfo); 28*5f39d1b3SJooyung Han return sysinfo.dwNumberOfProcessors; 29*5f39d1b3SJooyung Han #else 30*5f39d1b3SJooyung Han static const int hardware_threads_count = 31*5f39d1b3SJooyung Han static_cast<int>(sysconf(_SC_NPROCESSORS_CONF)); 32*5f39d1b3SJooyung Han return hardware_threads_count; 33*5f39d1b3SJooyung Han #endif 34*5f39d1b3SJooyung Han } 35*5f39d1b3SJooyung Han return max_threads; 36*5f39d1b3SJooyung Han } 37*5f39d1b3SJooyung Han 38*5f39d1b3SJooyung Han template <typename WorkersPool> 39*5f39d1b3SJooyung Han class SimpleContext { 40*5f39d1b3SJooyung Han public: SimpleContext(int max_num_threads,WorkersPool * pool)41*5f39d1b3SJooyung Han SimpleContext(int max_num_threads, WorkersPool* pool) 42*5f39d1b3SJooyung Han : max_num_threads_(max_num_threads), pool_(pool) {} 43*5f39d1b3SJooyung Han workers_pool()44*5f39d1b3SJooyung Han WorkersPool* workers_pool() { return pool_; } 45*5f39d1b3SJooyung Han max_num_threads()46*5f39d1b3SJooyung Han int max_num_threads() { return max_num_threads_; } 47*5f39d1b3SJooyung Han 48*5f39d1b3SJooyung Han private: 49*5f39d1b3SJooyung Han int max_num_threads_; 50*5f39d1b3SJooyung Han WorkersPool* pool_; 51*5f39d1b3SJooyung Han }; 52*5f39d1b3SJooyung Han 53*5f39d1b3SJooyung Han } // namespace meta 54*5f39d1b3SJooyung Han } // namespace gemmlowp 55*5f39d1b3SJooyung Han 56*5f39d1b3SJooyung Han #endif // GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 57