1a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang// Copyright 2016 The Gemmlowp Authors. All Rights Reserved. 27b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// 37b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// Licensed under the Apache License, Version 2.0 (the "License"); 47b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// you may not use this file except in compliance with the License. 57b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// You may obtain a copy of the License at 67b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// 77b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// http://www.apache.org/licenses/LICENSE-2.0 87b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// 97b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// Unless required by applicable law or agreed to in writing, software 107b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// distributed under the License is distributed on an "AS IS" BASIS, 117b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// See the License for the specific language governing permissions and 137b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang// limitations under the License. 147b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 157b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang#ifndef GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 167b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang#define GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 177b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 187b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang#include "../internal/multi_thread_gemm.h" 197b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 207b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wangnamespace gemmlowp { 217b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wangnamespace meta { 227b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 23a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wanginline int ResolveMaxThreads(int max_threads) { 247b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang if (max_threads == 0) { 257b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang static const int hardware_threads_count = 267b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang static_cast<int>(sysconf(_SC_NPROCESSORS_CONF)); 277b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang return hardware_threads_count; 287b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang } 297b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang return max_threads; 307b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang} 317b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 32a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wangtemplate <typename WorkersPool> 33a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wangclass SimpleContext { 34a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang public: 35a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang SimpleContext(int max_num_threads, WorkersPool* pool) 36a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang : max_num_threads_(max_num_threads), pool_(pool) {} 377b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 38a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang WorkersPool* workers_pool() { return pool_; } 397b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 40a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang int max_num_threads() { return max_num_threads_; } 417b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 42a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang private: 43a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang int max_num_threads_; 44a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang WorkersPool* pool_; 45a9fd919a0080e2c3c7ed1ce451c85a4d86f2f8c1Miao Wang}; 467b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 477b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang} // namespace meta 487b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang} // namespace gemmlowp 497b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang 507b05d573cf2e0fd3a58e98cdbfc65153a83fd6f1Miao Wang#endif // GEMMLOWP_META_MULTI_THREAD_COMMON_H_ 51