Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在运行时找到ARM处理器的最后一级缓存大小?_C++_Caching_Arm - Fatal编程技术网

C++ 如何在运行时找到ARM处理器的最后一级缓存大小?

C++ 如何在运行时找到ARM处理器的最后一级缓存大小?,c++,caching,arm,C++,Caching,Arm,我目前正在编写一个自定义DNN内核,在基于ARM的设备上运行。(使用C++,GCC 7.5.0)< /P> 我的代码将给定的工作负载分为适合最后一级缓存的批,以减少对主内存的访问 我已经成功地实现了在开发板上使用制造商提供的给定缓存大小的代码,但是该二进制文件预计将在多个环境中运行,每个环境可能具有不同的缓存配置 我的程序是否有办法在运行时知道给定系统的最后一级缓存信息?也许是系统呼叫 预期的环境是ARMv8-A(在aarch64模式下),可能是Linux内核4.3及更高版本 我已经尝试过/pr

我目前正在编写一个自定义DNN内核,在基于ARM的设备上运行。(使用C++,GCC 7.5.0)< /P> 我的代码将给定的工作负载分为适合最后一级缓存的批,以减少对主内存的访问

我已经成功地实现了在开发板上使用制造商提供的给定缓存大小的代码,但是该二进制文件预计将在多个环境中运行,每个环境可能具有不同的缓存配置

我的程序是否有办法在运行时知道给定系统的最后一级缓存信息?也许是系统呼叫

预期的环境是ARMv8-A(在aarch64模式下),可能是Linux内核4.3及更高版本


我已经尝试过/proc/cpuinfo、getconf、cpuid、lscpu、lshw,尽管它们在基于x86的桌面上运行良好,但它们都不会返回任何关于开发板上缓存大小的信息。(Odroid N2+,Ubuntu 18.04,Linux 4.9.230)。

您应该查看处理器的ARM参考手册,找到读取缓存大小的指令(如果有指令)。另外,在internet上搜索ARM缓存大小。我的理解是缓存大小是固定的,在运行时不能更改。linux信息命令可能是表查找。他们神秘地得到平台名称,然后在表中查找信息。无法保证平台具有返回所有信息的功能,也没有这样做的要求。我可能只是找到我期望的所有可能设备的缓存数据,并将其作为查找表存储在代码中的某个位置。虽然这意味着,如果它在未知设备上运行,它将返回到默认值(prob.512kb),这不是最优的。不过,还是要谢谢你的建议。