Как мне скомпилировать с "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 с нужными настройками.