在编译优化过程中,出现了关于 gnugcc
编译器参数的最佳猜测的问题--param l2-cache-size=
?(默认值为 kB 块大小的数字)
。具有共享 L2 缓存的 CPU 核心群集、在单个 MMU(内存管理单元)上具有联合 L2 缓存的 CPU 群集以及每个单核具有私有 L2 缓存的 CPU 核心的推荐值是什么?
在 Linux 发行版上,可以通过控制台命令获取 L2 缓存大小¹,例如:(
cat /sys/devices/system/cpu/cpu0/cache/index2/size
例如,对于多核系统上的 cpu0)
find /sys/devices/system/cpu/*/cache/index*/size -print -exec cat {} \;
lshw | grep -B 11 -C 11 -e level=2
dmidecode -t cache
lstopo-no-graphics
这是否足够具体,可以在 gcc 邮件列表中请求支持,或者是否有更广泛的文档可用于 L2 缓存相关的编译器标志?
谢谢
1)简短摘要如何在 Linux 中查找 L2 缓存大小?
答案1
这个问题已在错误报告中提出
错误 87444:'gcc -marc=native' 将 i7 和 i5 CPU 上的 L2 缓存大小设置为等于 L3 缓存大小。
看起来该参数l2-cache-size
不一定指 L2 缓存。它实际上是通过动态选择的,gcc
与 L3 缓存大小相同,并且只有在没有 L3 缓存时才等于 L2 缓存。
一位开发人员指出,它确实应该被重命名为last-level-cache
。因此,如果有 L4 缓存,gcc
将使用该大小。
我认为更改此参数不是一个好主意。但如果你这样做,请注意,此参数仅用于一些小的启发式方法,并且从评论的语气来看似乎相对不重要。