#ifndef NCNN_CPU_H
#define NCNN_CPU_H
#include <stddef.h>
#if defined _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#if defined __ANDROID__ || defined __linux__
#include <sched.h>
#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 _WIN32
ULONG_PTR mask;
#endif
#if defined __ANDROID__ || defined __linux__
cpu_set_t cpu_set;
#endif
#if __APPLE__
unsigned int policy;
#endif
};
NCNN_EXPORT int cpu_support_arm_edsp();
NCNN_EXPORT int cpu_support_arm_neon();
NCNN_EXPORT int cpu_support_arm_vfpv4();
NCNN_EXPORT int cpu_support_arm_asimdhp();
NCNN_EXPORT int cpu_support_arm_cpuid();
NCNN_EXPORT int cpu_support_arm_asimddp();
NCNN_EXPORT int cpu_support_arm_asimdfhm();
NCNN_EXPORT int cpu_support_arm_bf16();
NCNN_EXPORT int cpu_support_arm_i8mm();
NCNN_EXPORT int cpu_support_arm_sve();
NCNN_EXPORT int cpu_support_arm_sve2();
NCNN_EXPORT int cpu_support_arm_svebf16();
NCNN_EXPORT int cpu_support_arm_svei8mm();
NCNN_EXPORT int cpu_support_arm_svef32mm();
NCNN_EXPORT int cpu_support_x86_avx();
NCNN_EXPORT int cpu_support_x86_fma();
NCNN_EXPORT int cpu_support_x86_xop();
NCNN_EXPORT int cpu_support_x86_f16c();
NCNN_EXPORT int cpu_support_x86_avx2();
NCNN_EXPORT int cpu_support_x86_avx_vnni();
NCNN_EXPORT int cpu_support_x86_avx512();
NCNN_EXPORT int cpu_support_x86_avx512_vnni();
NCNN_EXPORT int cpu_support_x86_avx512_bf16();
NCNN_EXPORT int cpu_support_x86_avx512_fp16();
NCNN_EXPORT int cpu_support_loongarch_lsx();
NCNN_EXPORT int cpu_support_loongarch_lasx();
NCNN_EXPORT int cpu_support_mips_msa();
NCNN_EXPORT int cpu_support_loongson_mmi();
NCNN_EXPORT int cpu_support_riscv_v();
NCNN_EXPORT int cpu_support_riscv_zfh();
NCNN_EXPORT int cpu_riscv_vlenb();
NCNN_EXPORT int get_cpu_count();
NCNN_EXPORT int get_little_cpu_count();
NCNN_EXPORT int get_big_cpu_count();
NCNN_EXPORT int get_physical_cpu_count();
NCNN_EXPORT int get_physical_little_cpu_count();
NCNN_EXPORT int get_physical_big_cpu_count();
NCNN_EXPORT int get_cpu_level2_cache_size();
NCNN_EXPORT int get_cpu_level3_cache_size();
NCNN_EXPORT int get_cpu_powersave();
NCNN_EXPORT int set_cpu_powersave(int powersave);
NCNN_EXPORT const CpuSet& get_cpu_thread_affinity_mask(int powersave);
NCNN_EXPORT int set_cpu_thread_affinity(const CpuSet& thread_affinity_mask);
NCNN_EXPORT int is_current_thread_running_on_a53_a55();
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);
NCNN_EXPORT int get_flush_denormals();
NCNN_EXPORT int set_flush_denormals(int flush_denormals);
}
#endif