【问题标题】:Will a default release build always use up to SSSE3 instructions?默认发布版本是否始终使用最多 SSSE3 指令?
【发布时间】:2019-12-06 22:28:08
【问题描述】:

查看cargo (cargo build --release) 生成的二进制代码。我在二进制文件中发现使用了SSSE3 指令,如pshufb

看看我的cfg:

$ rustc --print cfg
debug_assertions
target_arch="x86_64"
target_endian="little"
target_env=""
target_family="unix"
target_feature="fxsr"
target_feature="sse"
target_feature="sse2"
target_feature="sse3"
target_feature="ssse3"
target_os="macos"
target_pointer_width="64"
target_vendor="apple"
unix

在给定 SIMD ISA(AVX2 或 SSSE3)的情况下,我有不同的路径,并希望在默认构建中使用非 SIMD 路径。

#[cfg(target_feature = "avx2")]
{
    ...
    return;
}
#[cfg(target_feature = "ssse3")]
{
    ...
    return;
}
// portable Rust code at the end
...

这是否意味着默认发布版本将始终使用最多 SSSE3 指令,而不仅仅是在 x86_64 上强制使用的 SSE2?

【问题讨论】:

    标签: rust x86-64 sse simd


    【解决方案1】:
    target_os="macos"
    

    ma​​cOS 上的默认发布版本会,是的。

    由于 Apple 从未销售过任何 AMD 或 Pentium4 CPU,因此 OS X 上的 x86-64 也意味着 SSSE3(第一代 Core2)。最初的 x86 Mac 是 Core(不是 Core2),但它们只是 32 位的。不幸的是,您不能假设 SSE4.1 或 -mpopcnt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      相关资源
      最近更新 更多