根据 most benchmarks ,英特尔的 Clear Linux 比其他发行版快得多,这主要归功于名为 Function Multi-Versioning 的 GCC 功能。 .现在 method他们使用的是编译代码,分析哪个函数包含向量化循环,然后使用 FMV 属性修补代码并再次编译。
GCC 自动执行此操作的可行性如何?例如,通过传递 -mmultiarch=sandybridge,skylake
(或类似的 -m 选项列出 CPU 扩展,如 AVX 和 AVX2)。
现在我对两种使用场景感兴趣:
最佳答案
不,但没关系。非常,非常实际上将从中受益的少量代码;大多数情况下,通过全局执行,您只会(无需特别努力将页面中的匹配版本排序在一起)使您的系统由于代码大小的巨大增加而受到更多内存限制和更慢。大多数实际负载甚至不受 CPU 限制;它们是 syscall-overhead-bound、GPU-bound、IO-bound 等等。 许多现代的 CPU-bound 不是运行预编译代码而是 JIT 代码(即在浏览器中运行的所有东西,无论是那是您真正的浏览器,或者是每个 Electron 应用程序中过时且未打补丁的 Chrome 分支)。
关于c - 在不更改代码的情况下使用 gcc 的功能多版本控制是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882796/