使用 GLIBC 硬件功能进行简单的动态调度

主要观点:

  • GLIBC 2.33+可针对不同优化级别多次构建共享库,动态链接器/加载器会选择当前 CPU 支持的最高版本。
  • GLIBC 硬件功能(hwcaps)是为 amd64 或 POWER 构建添加动态调度的简单方式,从 GLIBC 2.33 开始引入。
  • 面对为[ggml]创建高性能 Debian 包的挑战,利用 hwcaps 实现动态调度,不同 CPU 支持不同级别库的加载。
  • 最低级别库安装在常规路径,使用RUNPATHLD_LIBRARY_PATH时该机制也有效,Debian 的 ggml 包即将切换到GGML_CPU_ALL_VARIANTS=ON

关键信息:

  • 不同 CPU 支持的 hwcaps 级别:如 amd64 的 x86-64-v1 到 x86-64-v4 等。
  • ggml 构建和安装的库布局:如/usr/lib/x86_64-linux-gnu/ggml/glibc-hwcaps/x86-64-v4/libggml.so等。
  • 在不同 CPU 上的加载情况:支持 AVX512 加载 x86-64-v4 库等。

重要细节:

  • GLIBC 2.37 移除了 Legacy Hardware Capabilities。
  • 对于不使用 GLIBC 的系统,仍可安装可加载库但性能最差。
  • Debian 的 ggml 包即将切换到GGML_CPU_ALL_VARIANTS=ON
阅读 30
0 条评论