有一些
target-feature
可以通过在编译器中添加参数-C target-feature=+sse,+avx
来使用。可用功能可以使用 rustc --print target-features
显示。还有一些默认激活的功能,例如 AMDx64 目标上的 SSE。
如何查看默认激活哪些功能?我在任何地方都找不到这个,并且当我运行
cargo build --release --verbose
时它们没有被打印。
编辑: Matěj Laitl 在 GitHub 联系了我,并告诉我更好的方法来做到这一点。 您需要运行命令
rustc --print=cfg -C target-cpu=skylake
您可以将 skylake
替换为您的目标 CPU 或 native
。
我发现
rustc --print target-features
打印了llc -march=x86-64 -mcpu=x86-64 -mattr=help
的结果(如果你需要其他-march
,你可以使用llc --version)。
我放弃了寻找文档并编写了简单的脚本来显示启用了哪些属性。
脚本的使用有3个步骤:
rustc --print target-features
所以,我此时默认启用了此功能:
feature fxsr
feature sse
feature sse2
与
RUSTFLAGS='-C target-cpu=native' cargo run
我得到了这个清单:
feature aes
feature avx
feature avx2
feature bmi2
feature fma
feature fxsr
feature lzcnt
feature popcnt
feature rdseed
feature sha
feature sse
feature sse2
feature sse3
feature sse4.1
feature sse4.2
feature ssse3
feature xsave
feature xsavec
feature xsaveopt
feature xsaves
脚本可用作 gist。
我做了一些研究,看起来默认功能保存在 TargetOption::features 中,它作为 Target::option 的一部分提供。
我不确定你是否可以要求编译器以某种方式打印它,但你可以通过 github 搜索查找默认功能(可能它没有涵盖所有地方,但我相信它为未来提供了一个很好的提示)。
或者您可以从另一端开始并检查您的架构的规范文件这里。
附注 某些平台的默认功能: