对于一个项目,我打算使用不同的 CPU 编译各种 *NIX 操作系统及其相关软件包,以便最大限度地优化特定系统的性能。为了节省时间和金钱,我想知道使用类似架构编译代码之间是否真的存在差异。
例如: 如果我编译的话Debian GNU/Linux+ 带有 Intel Core 的默认存储库的所有软件包i7-8700并在具有 Intel Core 的系统上使用操作系统i7-8650U,它的执行效果是否与我用i7-8650U或者我会失去一些性能吗? (我不在乎百分比,即使是1%我也想知道)
简而言之,是否存在大于零的价值(0)在同一代的不同CPU型号上编译代码?因为如果不是这种情况,我只会从每个制造商的每一代中取出一个 CPU,然后就到此为止所有其他型号。
答案1
如果您确实打算最大化优化,那么您将使用特定于目标的优化,包括那些依赖于了解处理器缓存大小的优化。这意味着您几乎肯定希望每个处理器进行一次编译,尽管您可以通过适当的-march
设置在最快的可用处理器上为任何其他处理器进行编译-mtune
。
答案2
您似乎将两个不同的问题混为一谈。编译代码所使用的体系结构并不一定意味着编译器生成的代码的任何信息。例如,考虑:
$ gcc -o hello hello.c
对于给定版本的gcc
,这可能会为给定硬件架构生成相同的代码,无论您拥有什么底层 CPU。
但也有一些例外。例如,该-march=native
标志将导致编译器发出可能利用本地计算机 CPU 功能的代码。但即便如此,您也可以显式指定一个march
与您计算机的 CPU 架构不同的值,并且编译器将生成可能无法在您的计算机上运行的代码。