gpt4 book ai didi

android - 以编程方式获取 Android 上的缓存行大小

转载 作者:行者123 更新时间:2023-12-02 02:55:38 26 4
gpt4 key购买 nike

如何获取 ARM Android 上的缓存行大小?这等效于以下页面,但专门针对 Android:

Programmatically get the cache line size?

该页面上的答案以及我知道的其他方式不适用于 Android:

  • /sys/devices/system/cpu/cpu0/cache/不存在。
  • _SC_LEVEL1_DCACHE_LINESIZE不作为 sysconf 存在参数,即使我手动传入值 190 .
  • AT_DCACHEBSIZE不作为 getauxval 存在参数,即使我手动传入值 19 .
  • /proc/cpuinfo不包含缓存行信息。

  • 与 x86 不同,ARM 的 CPU 信息仅在内核模式下可用,因此没有 cpuid等效可用于应用程序。

    最佳答案

    我进行了一个小调查,发现了一些东西:

    首先,好像是sysconf()_SC_LEVEL1_ICACHE_SIZE , _SC_LEVEL1_ICACHE_ASSOC , _SC_LEVEL1_ICACHE_LINESIZE或其他与 CPU 缓存相关的标志总是返回 -1(有时可能为 0)和 it seems to be the reason for this ,它们根本没有实现。

    但有一个解决方案。使用this library如果您能够在项目中使用 JNI。这个库对于检索有关 CPU 的信息非常有帮助(我的设备和山一样古老):
    enter image description here

    这是我用来获取有关我的 CPU 缓存信息的代码:

    #include <string>
    #include <sstream>
    #include <cpuinfo.h>

    void get_cache_info(const char* name, const struct cpuinfo_cache* cache, std::ostringstream& oss)
    {
    oss << "CPU Cache: " << name << std::endl;
    oss << " > size : " << cache->size << std::endl;
    oss << " > associativity : " << cache->associativity << std::endl;
    oss << " > sets : " << cache->sets << std::endl;
    oss << " > partitions : " << cache->partitions << std::endl;
    oss << " > line_size : " << cache->line_size << std::endl;
    oss << " > flags : " << cache->flags << std::endl;
    oss << " > processor_start : " << cache->processor_start << std::endl;
    oss << " > processor_count : " << cache->processor_count << std::endl;
    oss << std::endl;
    }

    const std::string get_cpu_info()
    {
    cpuinfo_initialize();
    const struct cpuinfo_processor* proc = cpuinfo_get_current_processor();

    std::ostringstream oss;

    if (proc->cache.l1d)
    get_cache_info("L1 Data", proc->cache.l1d, oss);

    if (proc->cache.l1i)
    get_cache_info("L1 Instruction", proc->cache.l1i, oss);

    if (proc->cache.l2)
    get_cache_info("L2", proc->cache.l2, oss);

    if (proc->cache.l3)
    get_cache_info("L3", proc->cache.l3, oss);

    if (proc->cache.l4)
    get_cache_info("L4", proc->cache.l4, oss);

    return oss.str();
    }

    关于android - 以编程方式获取 Android 上的缓存行大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619909/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com