如何使用“ffast-math”进行编译?

21

我正在尝试对一些Rust代码进行基准测试,但我不知道如何设置"ffast-math"选项。

% rustc -C opt-level=3 -C llvm-args='-enable-unsafe-fp-math' unrolled.rs
rustc: Unknown command line argument '-enable-unsafe-fp-math'.  Try: 'rustc -help'
rustc: Did you mean '-enable-load-pre'?

llvm-args='-ffast-math'llvm-args='-fast' 都没有起作用。我应该使用什么标志?


如果我们成功启用这个功能,这是否也意味着可利用的 UB 案例将被 Rustc 接受? - bluss
2个回答

11
Rust问题#21690讨论了添加不精确的浮点运算。从那个问题链接的内在函数添加允许您选择松散规则的每个操作基础。例如,fadd_fast
pub unsafe extern "rust-intrinsic" fn fadd_fast<T>(a: T, b: T) -> T

使用内置函数需要夜间编译器和不安全的代码:

#![feature(core_intrinsics)]

use std::intrinsics::fadd_fast;

fn main() {
    let result = unsafe { fadd_fast(42.0, 31.0) };
    println!("{}", result);
}

最终,这种设计比命令行标志的全有或全无的解决方案要好得多。谁知道你的程序中是否有一些关键的浮点计算不能使用快速数学运算,而是深埋在其中?然而,当你试图与选择了它的C程序进行比较时,这并没有帮助到你!

4

您可以始终使用rustc --emit llvm-ir命令,并根据所需设置编译LLVM IR。


在发出.ll文件后,您将如何编译LLVM IR? - Harvey Adcock
你可以使用llc将IR(或BC)进行链接。 - Jack May

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接