[comp.sys.sgi] Answer to McCalpins f77 inquiry

XBR2D96D@DDATHD21.BITNET (Knobi der Rechnerschrat) (10/23/88)

Dear Mr. McCalpin,

 our experiences with the 4D F77 compiler (which is in fact from MIPS and
NOT from SGI, btw. the f77 for the 31xx series was also not fr4om SGI !!!)
are the following:

- it is a true F77-standard implementation. Don't look for "VAX" extensions,
  but if a program runs on that machine, its runs everywhere.
- if you rely on local variables to be saved across calls, you have to insert
  SAVE statements (as described in the standard). Unfortunately there is no
  compiler switch to do that for  you automatically (f77/3100 had one).
- The compiler (and the whole 4D machine) react angrily on wrong parameter
  lists (number and type).
- We have ported some (three) fortran packets (18000, 25000, 120000 lines
  of code) without much problems (except the SAVE stuff).

 Finally, even if the f77 compiler is not that comfortable and forgiveable
than other f77 compilers, I would never dream of changing from SGI. One of
my worst nightmares is to have a perfect fortran compiler without the
graphics performance to make use of it.

Martin Knoblauch
TH-Darmstadt
Physical Chemistry 1
Petersenstrasse 20
D-6100 Darmstadt, FRG

BITNET: <XBR2D96D@DDATHD21>

blbates@AERO4.LARC.NASA.GOV (Brent Bates TAD/ACB ms294 x2601) (10/24/88)

   On the other hand, what good is high-powered graphics hardware, if your
software wont work because the compiler is bad or the libraries dont work.

calvin@dinkum.SGI.COM (Calvin H. Vu) (10/26/88)

I feel obligated to answer to your questions since I am one of the people
working on the MIPS compiler at SGI.  I think your questions are general 
enough to warrant a posting of our response.  So here it goes:

<< 1. Does the MIPS compiler support array bounds checking?	f77 -C

	Yes, by using the -C option.

<< 2. Does the MIPS compiler support execution-time profiling?	f77 -pg

	Yes, by using -p option.   You can also use pixie(1) which does not
	require any special compilation option.   By using pixie(1) and 
	prof(1), you can get basic block counting which provides you with
	profiling information in the following areas:

		o  Time spent per procedure.
		o  Execution time on a per line basis.
		o  Invocation counts per procedure.  Tells how many
		   times a procedure is called and from which procedures
		   that reference the procedure.
		o  Procedures which were never executed.
		o  Lines of code which were never executed.


<< 3. Does the MIPS compiler have a RELIABLE interface to dbx?

	We have incorporated a lot of enhancements and bug fixes into the basic
	MIPS dbx package.   It IS RELIABLE (as of the 3.1 release, anyway)
	and does not have any of the problems you mentioned nor any 
	semi-significant problems that we know of.   
	We have added a 'dbx' user interface, called 'edge', which displays 3 
	windows (for dbx commands, source code, and program outputs) and 
	accepts inputs from a mouse.

<< 4. Does the MIPS compiler have argument checking in its intrinsic
<< 	function libraries?

	Yes, it has argument checking for intrinsic functions and none of our
	customers have found any problems with that.  At one time, Prime made
	a request to make the compiler less restrictive in checking intrinsic
	argument types and we have added that enhancement to the compiler.
	I don't know of any existing bugs in the intrinsic function library.

<< 5. Does the MIPS compiler actually support CORRECT IEEE arithmetic?
<< 	(including rounding, sufficient guard bits, and robust
<< 	intrinsics)  

	Sorry I don't have the answer for this.  As far as I know, we pass
	all the official QA tests, including GSA, ANSYS, SDRC, and the NAG
	floating point verification suite.   We just implemented floating-point 
	trap handling in response to the only request regarding floating-
	point operations we received from our customers.   

<< 6. Does the MIPS compiler have a good optimizer? 

	The MIPS f77 compiler provides four levels of optimization which
	include:
		o cross-compilation-unit global optimization
		o loop-invariant code
		o loop-induction expression
		o automatic prioritized register allocation
		o delayed-branch optimization
		o common subexpression, dead-code removal
		o constant folding
	Those are the ones I can recall off hand.  If you need further details
	I would be glad to provide a list of all the public literature 
	pulished on the MIPS optimizer.

	The Linpack benchmark can give a general idea of quality of 
	optimization. Linpack results are quoted as Fortran-BLAS and coded-BLAS 
	where coded-BLAS is assembly level coding of the low level algebra 
	routines.  The Linpack numbers for a 4D70 are :

		fortran		single precision : 2.03 MFLOPS
				double precision : 0.94 MFLOPS
		
		assembly	single precision : 2.39 MFLOPS
				double precision : 1.04 MFLOPS

	As you can see the difference between assembly and Fortran is about
	10%. This ratio indicates that our compilers are mature. We are, 
	however, constantly trying to improve this. 


Also, to Mr. Knobi's replies to your inquiry, I would like to add these points:

<<  it is a true F77-standard implementation. Don't look for "VAX" extensions,
<<   but if a program runs on that machine, its runs everywhere.

	As of release 3.1 of the FORTRAN compiler, we have included many
	VAX/VMS FORTRAN enhancements in the compiler.   It is now
	functionally compatible with VMS FORTRAN and allows easy porting
	of most VMS FORTRAN programs to our system.

<<  if you rely on local variables to be saved across calls, you have to insert
<<   SAVE statements (as described in the standard). Unfortunately there is no
<<   compiler switch to do that for  you automatically (f77/3100 had one).

	The 4D series also allows the '-static' option to do just that.

<<   The compiler (and the whole 4D machine) react angrily on wrong parameter
<<   lists (number and type).

	We have enhanced the compiler to be more lenient in checking argument
	types in intrinsic function calls.


Calvin Vu
calvin@sgi.com

jmb@patton.SGI.COM (Jim Barton) (10/31/88)

In article <21035@sgi.SGI.COM>, calvin@dinkum.SGI.COM (Calvin H. Vu) writes:
  ...

> << 5. Does the MIPS compiler actually support CORRECT IEEE arithmetic?
> << 	(including rounding, sufficient guard bits, and robust
> << 	intrinsics)  
> 
> 	Sorry I don't have the answer for this.  As far as I know, we pass
> 	all the official QA tests, including GSA, ANSYS, SDRC, and the NAG
> 	floating point verification suite.   We just implemented floating-point 
> 	trap handling in response to the only request regarding floating-
> 	point operations we received from our customers.   
  ...

All 4D series machines pass the PARANOIA test without errors.
I ran it myself.

-- Jim Barton
Silicon Graphics Computing Systems    "UNIX: Live Free Or Die!"
jmb@sgi.sgi.com, sgi!jmb@decwrl.dec.com, ...{decwrl,sun}!sgi!jmb

  "I used to be disgusted, now I'm just amused."
			- Elvis Costello, 'Red Shoes'
--