【问题标题】:How do I compile with "ffast-math"?如何使用“ffast-math”进行编译?
【发布时间】:2015-09-01 00:45:09
【问题描述】:

我正在尝试对一些 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' 也不起作用。我应该使用什么标志?

【问题讨论】:

  • 如果我们设法启用它,这是否也会导致 rustc 接受可利用的 UB 案例?

标签: rust llvm fast-math llvm-codegen


【解决方案1】:

您始终可以使用 rustc --emit llvm-ir 并使用所需的设置编译 LLVM IR。

【讨论】:

  • 发出 .ll 文件后如何编译 LLVM IR?
  • 可以使用llc链接IR(或BC)
【解决方案2】:

Rust 问题#21690 讨论了添加不精确的浮点运算。与该问题相关的是addition of intrinsics,它允许您基于每个操作选择更宽松的规则。例如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 程序进行比较时,这对您没有帮助!

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 2016-08-24
    • 2013-12-10
    • 2013-08-14
    • 2011-11-07
    • 2014-12-14
    • 2017-10-23
    • 2019-09-22
    • 2014-05-20
    相关资源
    最近更新 更多