使用函数多版本控制在一个二进制文件中支持多种 CPU 微架构

近期我在开发 Video2X 的时候为了程序在支持 AVX2 和 AVX-512 的 CPU 上能完全发挥出扩展指令集的性能,同时又能够保持对不支持这些扩展的 CPU 的支持,研究了一下如何将一个函数多个微架构的版本同时编译进可执行文件中,并且在运行时根据 CPU 支持的扩展动态选择应该调用的函数。我将在这篇文章中讲述如何在 GCC 和 LLVM 中用多版本控制来达成在程序运行时自动选择最佳的函数实现。

December 23, 2024 · K4YT3X