Speculative: Rust for base system components
Alan Somers
asomers at freebsd.org
Sun Jan 6 16:01:28 UTC 2019
On Tue, Jan 1, 2019 at 12:00 AM Brian Neal <brian at aceshardware.com> wrote:
>
> It was a debug build with no optimization for either compiler. But we
> can easily run a variety of settings for comparison:
>
> Compiler Flags Inst. Count Build Time
> ======================================================================
> clang 7.0.0 none 33 296ms
> -O3 23 341ms
> rustc 1.31.0 none 110 606ms
> -C opt-level=3 67 643ms
> gcc 8.2 none 37 211ms
> -O2 24 249ms
> -O3 119* 206ms
>
> * With -O3, gcc unrolled and vectorized the loop. The other compilers
> did not emit vectorized code at any of the standard optimization levels.
>
> So, essentially, double the build time and ~3 times the code for the
> same logic.
I get different results on Godbolt. I don't know exactly what your
program was, but I tried to recreate it from your description. I
wrote it in two ways. With opt-level=s, I got 13 instructions for one
version, and 16 for the other. With opt-level=3, I got vectorized
code for both. Here's my code:
pub fn oddcount(num: i32) -> i32 {
(0..num).map(|i| {
if i % 2 > 0 {
i
} else {
0
}
}).sum()
}
pub fn oddcount2(num: i32) -> i32 {
let mut sum = 0;
for i in 0..num {
if i % 2 > 0 {
sum += i;
}
}
sum
}
-Alan
More information about the freebsd-hackers
mailing list