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