#cpu #performance #optimization #cargo #multivers

nightly multivers-runner

创建可移植二进制文件的库,该二进制文件嵌入多个版本的执行文件,每个版本使用不同的CPU特性集

3 个版本

0.1.2 2024年8月11日
0.1.1 2024年2月17日
0.1.0 2023年12月15日

#698硬件支持

每月40 次下载

MIT/Apache

22KB
381 代码行

multivers-runner

此crate可用于创建可移植二进制文件,该文件嵌入多个版本的执行文件,每个版本使用不同的CPU特性集。

查看 cargo multivers,它为您完成所有工作:构建多个版本并构建嵌入它们的最终二进制文件。

它如何工作?

构建脚本解析包含从环境变量 MULTIVERS_BUILDS_DESCRIPTION_PATH 中的CPU特性依赖关系的可执行文件路径集的JSON描述文件(下面是一个示例)。然后,它生成一个包含压缩源二进制文件和压缩二进制补丁的Rust文件,用于从源代码重新生成其他二进制文件。

{
  "builds": [
    {
      "path": "/path/to/binary-with-additional-cpu-features",
      "features": [
        "aes",
        "avx",
        "avx2",
        "sse",
        "sse2",
        "sse3",
        "sse4.1",
        "sse4.2",
        "ssse3",
      ]
    },
    {
      "path": "/path/to/binary-source",
      "features": [
        "sse",
        "sse2"
      ]
    }
  ]
}

在运行时,函数 main 解压缩并执行与主机CPU特性匹配的版本。在Linux上,它使用 memfd_createfexecve 进行内存执行。然而,在Windows上,它将版本写入临时文件并执行。

cargomultivers

此库由 cargo multivers 使用来构建嵌入多个版本的最终二进制文件。

依赖关系

~2–12MB
~124K SLoC