Deutsch   English   Français   Italiano  
<vhtrns$71ic$1@paganini.bofh.team>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!newsfeed.bofh.team!paganini.bofh.team!not-for-mail
From: antispam@fricas.org (Waldek Hebisch)
Newsgroups: comp.lang.c
Subject: Re: else ladders practice
Date: Sun, 24 Nov 2024 00:24:30 -0000 (UTC)
Organization: To protect and to server
Message-ID: <vhtrns$71ic$1@paganini.bofh.team>
References: <3deb64c5b0ee344acd9fbaea1002baf7302c1e8f@i2pn2.org>   <vgpi5h$6s5t$1@paganini.bofh.team> <vgtsli$1690f$1@dont-email.me> <vhgr1v$2ovnd$1@paganini.bofh.team> <vhic66$1thk0$1@dont-email.me> <vhins8$1vuvp$1@dont-email.me> <vhj7nc$2svjh$1@paganini.bofh.team> <vhje8l$2412p$1@dont-email.me> <WGl%O.42744$LlWc.33050@fx42.iad> <vhkr9e$4bje$1@dont-email.me> <vhptmn$3mlgf$1@paganini.bofh.team> <vhq6b4$17hkq$1@dont-email.me> <vhqm3l$3ntp7$1@paganini.bofh.team> <vhso61$1o2of$1@dont-email.me>
Injection-Date: Sun, 24 Nov 2024 00:24:30 -0000 (UTC)
Injection-Info: paganini.bofh.team; logging-data="230988"; posting-host="WwiNTD3IIceGeoS5hCc4+A.user.paganini.bofh.team"; mail-complaints-to="usenet@bofh.team"; posting-account="9dIQLXBM7WM9KzA+yjdR4A";
User-Agent: tin/2.6.2-20221225 ("Pittyvaich") (Linux/6.1.0-9-amd64 (x86_64))
X-Notice: Filtered by postfilter v. 0.9.3
Bytes: 6165
Lines: 109

Bart <bc@freeuk.com> wrote:
> On 22/11/2024 19:29, Waldek Hebisch wrote:
>> Bart <bc@freeuk.com> wrote:
> 
>> clang -O3 -march=native       126112us
>> clang -O3                     222136us
>> clang -O                      225855us
>> gcc -O3 -march=native          82809us
>> gcc -O3                       114365us
>> gcc -O                        287786us
>> tcc                           757347us
> 
> You've omitted -O0 for gcc and clang. That timing probably won't be too 
> far from tcc, but compilation time for larger programs will be 
> significantly longer (eg. 10 times or more).
> 
> The trade-off then is not worth it unless you are running gcc for other 
> reasons (eg. for deeper analysis, or to compile less portable code that 
> has only been tested on or written for gcc/clang; or just an irrational 
> hatred of simple tools).

I have tried to use 'tcc' for one on the project that I mentioned
before.  It appears to work, real time for build is essentially
the same (actually some fraction of second longer, but that is
withing measurement noise), CPU time _may_ be shorter by 1.6%.
This confirms my earlier estimates that for that project C
compile time has very small impact on overall compile time
(most compilations are not C compilation).  In this project
I use '-O' which is likely to give better runtime speed
(I do not bother with '-O2' or '-O3').  Also, I use '-O' for
better diagnostics.

I a second project, '-O2' is used for image processing library,
this takes significant time to compile, but this library is
performance critical code.
 
>> There is some irregularity in timings, but this shows that
>> factor of order 9 is possible.
> 
> That's an extreme case, for one small program with one obvious 
> bottleneck where it spends 99% of its time, and with little use of 
> memory either.
> 
> For simply written programs, the difference is more like 2:1. For more 
> complicated C code that makes much use of macros that can expand to lots 
> of nested function calls, it might be 4:1, since it might rely on 
> optimisation to inline some of those calls.
> 
> Again, that would be code written to take advantage of specific compilers.
> 
> But that is still computationally intensive code working on small 
> amounts of memory.
> 
> I have a text editor written in my scripting language. I can translate 
> its interpreter to C and compile with both gcc-O3 and tcc.
> 
> Then, yes, you will notice twice as much latency with the tcc 
> interpreter compared with gcc-O3, when doing things like 
> deleting/inserting lines at the beginning of a 1000000-line text file.
> 
> But typically, the text files will be 1000 times smaller; you will 
> notice no difference at all.
> 
> I'm not saying no optimisation is needed, ever, I'm saying that the NEED 
> for optimisation is far smaller than most people seem to think.

There is also question of disc space.  'tcc' compiled by itself is
404733 bytes (code + data) (0.024s compile time), by gcc (default) is
340950 (0.601s compile time), by gcc -O is 271229 (1.662s compile
time), by gcc -Os is 228855 (2.470s compile time), by gcc -O2
is 323392 (3.364s compile time), gcc -O3 is 407952 (4.627s compile
time).  As you can see gcc -Os can save quite a bit of disc space
for still moderate compile time.

And of course, there is a question why program with runtime that
does not matter is written in a low level language?  Experience
shows that using higher level language is easier, and higher
level language compiled to bytecode can give significantly smaler
code than gcc -Os from low-level code.  Several programs for
early micros used bytecode because this was the only way to
fit the program into available memory.

> Here are some timings for that interpreter, when used to run a script to 
> compute fib(38) the long way:
> 
> Interp   Built with       Timing
> 
> qc       tcc              9.0 secs    (qc is C transpiled version)
> qq       mm               5.0         (-fn; qq is original M version) 
> 
> qc       gcc-O3           4.0
> qq       mm               1.2         (-asm)
> 
> (My interpreter doesn't bother with faster switch-based or computed-goto 
> based dispatchers. The choice is between a slower function-table-based 
> one, and an accelerated threaded-code version using inline ASM.
> 
> These are selected with -fn/-asm options. The -asm version is not JIT; 
> it is still interpreting a bytecode at a time).
> 
> So the fastest version here doesn't use compiler optimisation, and it's 
> 3 times the speed of gcc-O3. My unoptimised HLL code is also only 25% 
> slower than gcc-O3.

Well, most folks would "not bother" with inline ASM and instead use
fastest wersion that C can give.  Which likely would involve
gcc -O2 or gcc -O3.

-- 
                              Waldek Hebisch