4 ms·
On my machine, running the debug executable on the medium-size dataset takes ~14.5 seconds, and release mode takes ~0.8 seconds.
by fwip 3y ago
On my machine, running the debug executable on the medium-size dataset takes ~14.5 seconds, and release mode takes ~0.8 seconds.
- adgjlsfhk1 3y agodo you know why debug mode for rust is so slow? is it also compiling without any optimization by default? it's it checks for overflow?
- FridgeSeal 3y agoThe optimisation passes are expensive (not the largest source of compile time duration though). Debug mode is designed to build as-fast-as-possible while still being correct, so that you can run your binary (with debug symbols) ASAP. Overflow checks are present even in release mode, and some write-ups seem to indicate they have less overhead than you’d think. Rust lets your configure your cargo configs to apply some optimisation passes even in debug, if you wish. There’s also a config to have your dependencies optimised (even in debug) if you want. The Bevy tutorial walks through doing this, as a concrete example.
- jakobnissen 3y agoThat's not right, Rust only checks for overflow in release mode for numbers where its value is known at compile time. In debug mode all operations are checked for overflow.
- FridgeSeal 3y agoAahh, my bad. TIL.
- estebank 3y agoInteger overflows can be enabled in release mode by modifying your Cargo.toml with [profile.release] overflow-checks = true IMO it should have been the default.
- fwip 3y agoYes, optimization is disabled by default in debug mode, which makes your code more debuggable. Overflow checks are also present in debug mode, but removed in release mode. Bounds checking is present in release mode as well as debug mode, but can sometimes be optimized away. There's also some debug information that is present in the file in debug mode, which leads to a larger binary size, but shouldn't meaningfully affect performance except in very simple/short programs.