Как мне скомпилировать с "ffast-math"?

Я пытаюсь протестировать некоторый код 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' тоже не работал Какой флаг я должен использовать?

2 ответа

Ржавчина № 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);
}

В конечном счете, это гораздо лучшая конструкция, чем решение "все или ничего" для флага командной строки. Кто знает, есть ли какое-то вычисление с плавающей запятой, которое крайне важно, чтобы не использовать быструю математику, скрытую глубоко в вашей программе? Однако это не поможет вам при сравнении с программой на С, которая выбрала это!

Вы всегда можете использовать rustc --emit llvm-ir и скомпилируйте LLVM IR с нужными настройками.

Другие вопросы по тегам