Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!rochester!ritcv!rocksvax!martyl
From: mar...@rocksvax.UUCP (Marty Leisner)
Newsgroups: comp.os.minix
Subject: minix C compiler performance
Message-ID: <1131@rocksvax.UUCP>
Date: Sat, 30-May-87 12:01:02 EDT
Article-I.D.: rocksvax.1131
Posted: Sat May 30 12:01:02 1987
Date-Received: Mon, 1-Jun-87 05:44:07 EDT
Organization: Xerox: Henrietta, NY
Lines: 34

Well, I finally got my copy of Minix running on my harddisk on my 10 Mhz PC
AT.

I felt it took an awfully long time to recompile/link the kernel, so once
I was up on a harddisk, I ran dhrystone to get an idea of performance 
(yeah, it ain't perfect, but it is a compute intensive benchmark).   

Under Minix, dhrystone (at least the copy I got from netlib) turned about
250 dhrystones/second.  Under Aztec C/MS-DOS on the same hardware, dhrystone
turned 1200+ dhrystones/second.

A few questions about the Minix C compiler and the distribution disks:
	1) which compiler was the AT kernel/utilities compiled with?
	   When I recompiled the kernel, the sizes of the linked files
	   didn't agree with the distribution versions.
	2) While running dhrystone under the time utility, it reported
	   99%+ time was user (something like 3:00 user, :01 system, 3:02 
           real -- there wasn't anything else running at the time).
	   This would indicate dhrystone did as intended -- benchmark the
	   C compiler and not minix itself.

Are there any plans to improve the Minix C compiler?  Or am I doing something
wrong?  In the Minix book, Andy Tanenbaum asserts clean code is more 
important than highly optimized code -- and I agree with this premise and
feel Minix looks (from a browsing level) like a very clean software project.
But a factor of 5 in C compiler performance is somewhat unacceptable.

Any comments out there?

marty leisner
xerox corp.
leisner.h...@xerox.com
mar...@rocksvax.uucp

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!mcvax!botter!ast
From: a...@cs.vu.nl (Andy Tanenbaum)
Newsgroups: comp.os.minix
Subject: Re: minix C compiler performance
Message-ID: <1192@botter.cs.vu.nl>
Date: Sun, 31-May-87 15:25:43 EDT
Article-I.D.: botter.1192
Posted: Sun May 31 15:25:43 1987
Date-Received: Tue, 2-Jun-87 02:15:34 EDT
References: <1131@rocksvax.UUCP>
Reply-To: a...@cs.vu.nl (Andy Tanenbaum)
Organization: VU Informatica, Amsterdam
Lines: 58


Marty Leisner recently posted a note saying the MINIX C compiler ran
20% the speed of an MS-DOS compiler.  This figure disagrees with an
earlier posting about dhrystones, and also disagrees with my comparisons
with other compilers.  The MINIX binaries were made with the PC-IX compiler,
and these are typically about 15% smaller and faster than the MINIX ones.

I think the dhrystone tests must use some feature that the MINIX compiler
is poor at (like it doesn't use registers), but I can't imagine that you
will get a factor of five difference across the board with real programs.
It would be interesting to see measurements of real programs (e.g.,
commands/*.c) with MINIX and other compilers.

The main problem with the C compiler is that it is completely table driven,
and the code quality depends on how much work the table writer put into
optimization etc.  This particular table writer, who shall remain nameless
here, did not especially like the 8088 architecture, and wanted to get the
job done as fast as he could.  As soon as the compiler worked correctly, and
passed a large battery of compiler test programs that are part of ACK, he
stopped work.  The only way to improve it is for someone who has ACK to
go back to his tables and optimize them.  Our 68020 compiler, for example,
which uses the same software but has a much better driving table, produces
code that is better than Motorola's own compiler.

The table improvement can't be done from the "source" you can get from
UniPress/Transmediair, because it requires running the compiler-compiler system,
and the C compiler "source" for MINIX is the compiler, not the compiler-compiler
(which runs on VAXes and SUNs with 30 or 40 megabytes of free disk space,
and definitely not on PCs).  Since universities can get the complete ACK
source for $995 from UniPress or Transmediair, perhaps some professor who
is interested in compilers can get it and have a student work on improving
the quality as a Master's thesis.  Code optimization on the 8088 ought to
provide plenty of food for thought for the student.  It obviously can be done,
but requires some thinking.

Another thing that might be worthwhile would be for someone who knows the
8088 assembly language fairly well to just look at the assembly code of a
few simple programs, and see if there are any obvious places where the
compiler messes up, other than not using registers.  If there are, there
might be a possibility of making another optimizer that reads in the
assembly code and outputs an optimized version of same.  The current
optimizer, /lib/opt, works on the intermediate code only, and does not
include any 8088-specific optimizations.

I am starting to think about the MINIX 1.2 distribution.  It will probably
mostly contain bugs fixes and some of the new programs that have been
posted here.  I will describe it at great length later, but if you have
been collecting bug reports and have been waiting until you get 100 of them
before posting, now might be a good time to post them anyway.  Likewise,
if you have any useful programs that you intended to post but haven't yet,
now is a good time.

To repeat, I will get back to this subject at length later, and will post
all the differences between 1.2 and 1.1 for the benefit of people with 1.1.
The Atari version, incidentally, is coming along, but is still not finished,
and will not be in 1.2.

Andy Tanenbaum (a...@cs.vu.nl)

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!rutgers!clyde!cbosgd!ihnp4!occrsh!uokmax!rmtodd
From: rmt...@uokmax.UUCP (Richard Michael Todd)
Newsgroups: comp.os.minix
Subject: Re: minix C compiler performance
Message-ID: <582@uokmax.UUCP>
Date: Sun, 31-May-87 23:44:13 EDT
Article-I.D.: uokmax.582
Posted: Sun May 31 23:44:13 1987
Date-Received: Tue, 2-Jun-87 07:10:52 EDT
References: <1131@rocksvax.UUCP>
Organization: University of Oklahoma, Norman, OK
Lines: 40
Summary: main difference may be register variables

In article <1...@rocksvax.UUCP>, mar...@rocksvax.UUCP (Marty Leisner) writes:
> Under Minix, dhrystone (at least the copy I got from netlib) turned about
> 250 dhrystones/second.  Under Aztec C/MS-DOS on the same hardware, dhrystone
> turned 1200+ dhrystones/second.
Well, what little testing I've done doesn't show that drastic a difference
between the two compilers, but there is a difference in execution times.
I'm not familiar with the Dhrystone benchmark--does it use register variables
heavily?  You see, the Minix compiler apparently ignores register
declarations, whereas Aztec C (I have the developer's system, v3.40a), seems
to handle up to two int-sized register vars, one in si, one in di.  It makes
a good bit of difference.  I just recently did a slightly modified sieve,
(I upped the number of iterations to 100 from 10) compiling both with and
without register declarations, and linking with the Minix library and
running them through dos2out, so that the two Aztec-compiled versions
(with & without register declarations) would run under Minix.  This
ensures that we aren't accidentally including any differences arising
from the different operating environments (DOS and Minix). Timing them
and the sieve compiled under Minix's compiler gave these results
(all results are user time given by /usr/bin/time, CPU is 8088 at 4.77MHz)
Aztec cc with register declarations:       96.5 sec.
Aztec cc without register declarations:   132.4 sec.
Minix cc                                  141.0 sec.
You can see that without register declarations, Aztec's code gives
performance slightly better than the Minix cc.  The register variables
make a huge difference.  
Of course, the sieve is a rather limited benchmark; other benchmarks like
Dhrystone will get different improvements by addition/subtraction of
register variables.
> A few questions about the Minix C compiler and the distribution disks:
> 	1) which compiler was the AT kernel/utilities compiled with?
> 	   When I recompiled the kernel, the sizes of the linked files
> 	   didn't agree with the distribution versions.
Apparently it was the PC/IX compiler.  The Minix compiler produces somewhat
larger code.  From my limited experimentation with Aztec C -- recompiling
the shell and fs -- the code size produced is roughly comparable to the
PC/IX output.
--------------------------------------------------------------------------
Richard Todd
USSnail:820 Annie Court,Norman OK 73069
UUCP: {allegra!cbosgd|ihnp4}!okstate!uokmax!rmtodd

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!rutgers!ames!amdcad!sun!texsun!smu!mcomp!authorplaceholder
From: w...@mcomp.UUCP
Newsgroups: comp.os.minix
Subject: Re: minix C compiler performance
Message-ID: <222500026@mcomp>
Date: Mon, 1-Jun-87 09:17:00 EDT
Article-I.D.: mcomp.222500026
Posted: Mon Jun  1 09:17:00 1987
Date-Received: Fri, 12-Jun-87 01:28:27 EDT
References: <1131@rocksvax.UUCP>
Lines: 31
Nf-ID: #R:rocksvax.UUCP:-113100:mcomp:222500026:000:1555
Nf-From: mcomp.UUCP!wnp    Jun  1 08:17:00 1987


rocksvax.UUCP!martyl (Marty Leisner) writes:
> ...
> I felt it took an awfully long time to recompile/link the kernel, so once
> I was up on a harddisk, I ran dhrystone to get an idea of performance 
> (yeah, it ain't perfect, but it is a compute intensive benchmark).   
> 
> Under Minix, dhrystone (at least the copy I got from netlib) turned about
> 250 dhrystones/second.  Under Aztec C/MS-DOS on the same hardware, dhrystone
> turned 1200+ dhrystones/second.
> ...  In the Minix book, Andy Tanenbaum asserts clean code is more 
> important than highly optimized code -- and I agree with this premise and
> feel Minix looks (from a browsing level) like a very clean software project.
> But a factor of 5 in C compiler performance is somewhat unacceptable.

In the Minix book AST says that the compiler is the "Amsterdam Compiler Kit"
C compiler, "which was shoehorned onto the 8088 with some loss in performance".
I don't know which machine the ACK compiler was originally written for.

I guess it's up to us, the users, to come up with a better compiler. Has anyone
inquired yet how much the compiler sources would cost?

>	1) which compiler was the AT kernel/utilities compiled with?
>	   When I recompiled the kernel, the sizes of the linked files
>	   didn't agree with the distribution versions.

I understand that the MINIX distribution was compiler with the PC/IX compiler.
-----------------------------------------------------
Wolf N. Paul, 290 Dogwood, Plano, Tx. 75075
UUCP:  ihnp4!convex!mcomp!wnp
Phone: (214) 578-8023  W.U.ESL: 6283-2882

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!rochester!ur-tut!tfra
From: t...@ur-tut.UUCP (Tom Frauenhofer)
Newsgroups: comp.os.minix
Subject: Re: minix C compiler performance
Message-ID: <1413@ur-tut.UUCP>
Date: Mon, 1-Jun-87 15:30:22 EDT
Article-I.D.: ur-tut.1413
Posted: Mon Jun  1 15:30:22 1987
Date-Received: Wed, 3-Jun-87 01:36:01 EDT
References: <1131@rocksvax.UUCP> <582@uokmax.UUCP>
Reply-To: t...@tut.cc.rochester.edu.UUCP (Tom Frauenhofer)
Organization: Univ. of Rochester Computing Center
Lines: 11

[Et tu, line-eater?]

I've run dhrystone using both the Aztec and Microsoft C compilers under 
"good ole" (:-) MS-Dos.  You can compile it with flags for either register or
no register execution (also with direct structure assignments as well as
memcpy's).  Aztec C was about twice as fast as Microsoft during execution
of the .EXE's generated (in fact, the Aztec C LARGE memory model was about
1 1/2 times as fast as the Microsoft SMALL model!).  Either Aztec has done
something incredibly right with their compiler or the dhrystone benchmark
is written in such a way as to "favor" Aztec's compiler (a longshot
considering how the benchmark evolved).

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!vrdxhq!bms-at!stuart
From: stu...@bms-at.UUCP (Stuart D. Gathman)
Newsgroups: comp.os.minix
Subject: Re: minix C compiler performance
Message-ID: <404@bms-at.UUCP>
Date: Mon, 1-Jun-87 22:12:29 EDT
Article-I.D.: bms-at.404
Posted: Mon Jun  1 22:12:29 1987
Date-Received: Wed, 3-Jun-87 04:12:29 EDT
References: <1131@rocksvax.UUCP> <1192@botter.cs.vu.nl>
Organization: Business Management Systems, Inc., Fairfax, VA
Lines: 25
Summary: My complaint is different


I find the generated code quality of the MINIX compiler to be acceptable.
What is not acceptable is the amount of time it takes to compile.

I literally do the following while trying to fix fsck:

	a) plan changes and edit
	b) start compile
	c) prepare and eat dinner
	d) check to see if it's done yet

This is with a hard disk!  I goes twice as fast on my diskette only
Toshiba 1100+, so I have been using that instead.  But it is still
a major snack break.

I bought an MS-DOS compiler from aztec a while back that runs in small model
(and generates small model).  It is very fast at compiles (compiles fsck in
a few minutes).  The code quality is slightly better than MINIX.  
I wish one of these companies (Borland especially) would sell a fast compiler
for MINIX.

P.S. asld seems to be reasonably fast.
-- 
Stuart D. Gathman	<stu...@bms-at.uucp>
			<..!seismo!dgis!bms-at!stuart>