|
- // Tencent is pleased to support the open source community by making ncnn available.
- //
- // Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- //
- // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
- // in compliance with the License. You may obtain a copy of the License at
- //
- // https://opensource.org/licenses/BSD-3-Clause
- //
- // 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 NCNN_CPU_H
- #define NCNN_CPU_H
-
- #include <stddef.h>
-
- #if defined __ANDROID__ || defined __linux__
- #include <sched.h> // cpu_set_t
- #endif
-
- #include "platform.h"
-
- namespace ncnn {
-
- class NCNN_EXPORT CpuSet
- {
- public:
- CpuSet();
- void enable(int cpu);
- void disable(int cpu);
- void disable_all();
- bool is_enabled(int cpu) const;
- int num_enabled() const;
-
- public:
- #if defined __ANDROID__ || defined __linux__
- cpu_set_t cpu_set;
- #endif
- #if __APPLE__
- unsigned int policy;
- #endif
- };
-
- // test optional cpu features
- // neon = armv7 neon or aarch64 asimd
- NCNN_EXPORT int cpu_support_arm_neon();
- // vfpv4 = armv7 fp16 + fma
- NCNN_EXPORT int cpu_support_arm_vfpv4();
- // asimdhp = aarch64 asimd half precision
- NCNN_EXPORT int cpu_support_arm_asimdhp();
-
- // avx2 = x86_64 avx2 + fma + f16c
- NCNN_EXPORT int cpu_support_x86_avx2();
-
- // cpu info
- NCNN_EXPORT int get_cpu_count();
- NCNN_EXPORT int get_little_cpu_count();
- NCNN_EXPORT int get_big_cpu_count();
-
- // bind all threads on little clusters if powersave enabled
- // affects HMP arch cpu like ARM big.LITTLE
- // only implemented on android at the moment
- // switching powersave is expensive and not thread-safe
- // 0 = all cores enabled(default)
- // 1 = only little clusters enabled
- // 2 = only big clusters enabled
- // return 0 if success for setter function
- NCNN_EXPORT int get_cpu_powersave();
- NCNN_EXPORT int set_cpu_powersave(int powersave);
-
- // convenient wrapper
- NCNN_EXPORT const CpuSet& get_cpu_thread_affinity_mask(int powersave);
-
- // set explicit thread affinity
- NCNN_EXPORT int set_cpu_thread_affinity(const CpuSet& thread_affinity_mask);
-
- // misc function wrapper for openmp routines
- NCNN_EXPORT int get_omp_num_threads();
- NCNN_EXPORT void set_omp_num_threads(int num_threads);
-
- NCNN_EXPORT int get_omp_dynamic();
- NCNN_EXPORT void set_omp_dynamic(int dynamic);
-
- NCNN_EXPORT int get_omp_thread_num();
-
- NCNN_EXPORT int get_kmp_blocktime();
- NCNN_EXPORT void set_kmp_blocktime(int time_ms);
-
- } // namespace ncnn
-
- #endif // NCNN_CPU_H
|