Skip to content

Commit

Permalink
feat: add NCNN_ISA environment variable cache for ARM ISA feature checks
Browse files Browse the repository at this point in the history
This commit adds a cache mechanism for various ARM ISA feature checks using NCNN_ISA environment variables.
The `get_isa_env` results are now cached in static variables at the file level.

Signed-off-by: Kaiyao Duan <[email protected]>
  • Loading branch information
inspireMeNow committed Sep 8, 2024
1 parent 744d51e commit af897e1
Showing 1 changed file with 30 additions and 14 deletions.
44 changes: 30 additions & 14 deletions src/cpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1893,6 +1893,22 @@ static int get_isa_env(const char* isa_flags)
return false;
}

#if (__aarch64__ || __arm__)
static int is_cpu_arm_cpuid_disabled = get_isa_env("-cpuid");
static int is_cpu_arm_asimdhp_disabled = get_isa_env("-asimdhp");
static int is_cpu_arm_asimddp_disabled = get_isa_env("-asimddp");
static int is_cpu_arm_asimdfhm_disabled = get_isa_env("-asimdfhm");
static int is_cpu_arm_bf16_disabled = get_isa_env("-bf16");
static int is_cpu_arm_i8mm_disabled = get_isa_env("-i8mm");
static int is_cpu_arm_sve_disabled = get_isa_env("-sve");
static int is_cpu_arm_sve2_disabled = get_isa_env("-sve2");
static int is_cpu_arm_svebf16_disabled = get_isa_env("-svebf16");
static int is_cpu_arm_svei8mm_disabled = get_isa_env("-svei8mm");
static int is_cpu_arm_svef32mm_disabled = get_isa_env("-svef32mm");
static int is_cpu_arm_edsp_disabled = get_isa_env("-edsp");
static int is_cpu_arm_vfpv4_disabled = get_isa_env("-vfpv4");
#endif

// the initialization
static void initialize_global_cpu_info()
{
Expand Down Expand Up @@ -2121,7 +2137,7 @@ int cpu_support_arm_edsp()
{
try_initialize_global_cpu_info();
#if __arm__ && !__aarch64__
if (get_isa_env("-edsp"))
if (is_cpu_arm_edsp_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_edsp;
Expand All @@ -2143,7 +2159,7 @@ int cpu_support_arm_neon()
#if __aarch64__
return 1;
#elif __arm__
if (get_isa_env("-neon"))
if (is_cpu_arm_neon_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_neon;
Expand All @@ -2165,7 +2181,7 @@ int cpu_support_arm_vfpv4()
#if __aarch64__
return 1;
#elif __arm__
if (get_isa_env("-vfpv4"))
if (is_cpu_arm_vfpv4_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_vfpv4;
Expand All @@ -2185,7 +2201,7 @@ int cpu_support_arm_asimdhp()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-asimdhp"))
if (is_cpu_arm_asimdhp_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_asimdhp;
Expand Down Expand Up @@ -2215,7 +2231,7 @@ int cpu_support_arm_cpuid()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-cpuid"))
if (is_cpu_arm_cpuid_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_cpuid;
Expand All @@ -2235,7 +2251,7 @@ int cpu_support_arm_asimddp()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-asimddp"))
if (is_cpu_arm_asimddp_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_asimddp;
Expand Down Expand Up @@ -2263,7 +2279,7 @@ int cpu_support_arm_asimdfhm()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-asimdfhm"))
if (is_cpu_arm_asimdfhm_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_asimdfhm;
Expand Down Expand Up @@ -2291,7 +2307,7 @@ int cpu_support_arm_bf16()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-bf16"))
if (is_cpu_arm_bf16_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_bf16;
Expand All @@ -2317,7 +2333,7 @@ int cpu_support_arm_i8mm()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-i8mm"))
if (is_cpu_arm_i8mm_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_i8mm;
Expand All @@ -2343,7 +2359,7 @@ int cpu_support_arm_sve()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-sve"))
if (is_cpu_arm_sve_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_sve;
Expand All @@ -2363,7 +2379,7 @@ int cpu_support_arm_sve2()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-sve2"))
if (is_cpu_arm_sve2_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_sve2;
Expand All @@ -2383,7 +2399,7 @@ int cpu_support_arm_svebf16()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-svebf16"))
if (is_cpu_arm_svebf16_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_svebf16;
Expand All @@ -2403,7 +2419,7 @@ int cpu_support_arm_svei8mm()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-svei8mm"))
if (is_cpu_arm_svei8mm_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_svei8mm;
Expand All @@ -2423,7 +2439,7 @@ int cpu_support_arm_svef32mm()
{
try_initialize_global_cpu_info();
#if __aarch64__
if (get_isa_env("-svef32mm"))
if (is_cpu_arm_svef32mm_disabled)
return 0;
#if defined _WIN32
return g_cpu_support_arm_svef32mm;
Expand Down

0 comments on commit af897e1

Please sign in to comment.