Date: Tue, 8 Jan 2019 00:11:03 +0000 From: Alejandro Martinez <unledev@gmail.com> To: Brian Neal <brian@aceshardware.com> Cc: freebsd-hackers@freebsd.org, Garance A Drosehn <drosih@rpi.edu> Subject: Re: Speculative: Rust for base system components Message-ID: <CAFwFPky1v7%2Bf=d5EiqWW5XEKVXmB9a2Cinffi4%2BzOxNAsx00Ag@mail.gmail.com> In-Reply-To: <E0CA1E33-C096-44DC-B494-DE3B87237E57@aceshardware.com> References: <ca76e5f7-6e59-bd67-144a-90ad66f0252e@metricspace.net> <7d7bc47d-04cf-2f9b-00a3-e3d9d92b3623@aceshardware.com> <72922F2C-9D27-47AA-BB1C-2DA8589CF008@rpi.edu> <92bd5362-d898-aa12-8f3d-9fbe23f38e0c@aceshardware.com> <CAFwFPkziF%2BEvZ2fEv1fErfmDujPm9UhxvoYUBoCo-%2BtjXtBWmw@mail.gmail.com> <E0CA1E33-C096-44DC-B494-DE3B87237E57@aceshardware.com>
index | next in thread | previous in thread | raw e-mail
Hi Brian, On Fri, Jan 4, 2019 at 4:50 PM Brian Neal <brian@aceshardware.com> wrote: > > Sure! > > Just go to http://godbolt.org/ and type a small program in each language, enter the appropriate compilation flags and compare the output. The function I used took a count as a parameter, iterated through the count, summed up odd numbers and returned the sum. I did the test with what I understood must had been the code you used, but my results are different. See [1]. > >> It was a debug build with no optimization for either compiler. But we > >> can easily run a variety of settings for comparison: Debug builds show also panic and overflow checks for Rust sources, which explains the difference in instruction count. > >> > >> 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. I did not see this. Actually I had to force Rust with extra flags to stop it from emitting such code. In fact, both Rust and clang generate the exact same code for the equivalent function. > >> So, essentially, double the build time and ~3 times the code for the > >> same logic. This is not true in the tests I did wrt instruction count. The compiler is certainly slower, although not sure it is 2x slower than clang. In fact, as you can see, there's one implementation in Rust that beats the C code in inst count for both gcc and clang. That said, instruction count is hardly a good metric, especially with relatively recent CPUs. My 2c: these tests focus on a very narrow set of properties and cases that IMO should not be the basis for considering a language. [1] https://godbolt.org/z/hqi_VX. Cheers, Alexhelp
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFwFPky1v7%2Bf=d5EiqWW5XEKVXmB9a2Cinffi4%2BzOxNAsx00Ag>
