TweetFollow Us on Twitter

FORTRAN Accuracy
Volume Number:8
Issue Number:5
Column Tag:Jörg's Folder

Accuracy & Speed in FORTRAN Compilers

MacFortran II compared with Language Systems Fortran on the Quadra.

By Jörg Langowski, MacTutor Regular Contributing Author

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

Absoft has recently announced MacFORTRAN II version 3.1, which is supposed to run very fast on Quadras. Since I reviewed Language Systems Fortran not long ago, I was curious how big the speed difference between these two compilers really was. So again, I went back to my benchmark programs. Two of them are (in)famous: the Whetstone benchmark, which tests primarily integer arithmetic and depends a lot on the efficiency of subroutine calling, because it works by calling lots of small routines repeatedly from a loop; and the Linpack, which tests the efficiency of floating point matrix operations using a package of linear algebra routines which are quite useful by themselves.

Furthermore, I found a third useful program between the demos included on the LS Fortran diskettes: it is called Paranoia (mentioned already in V8#1), and checks the consistency of the floating point arithmetic. Things are checked like whether 3*4 equals 4*3, 1+0 =1, 1*0 = 0 etc. These may seem trivial to you, but as you will see, they aren’t when you are dealing with Fortran compilers.

Numerical accuracy tests

I’d like to describe the Paranoia benchmark first, and its results on the two Fortran compilers. The program was original written in Basic and then ported to Fortran; the person who was responsible for the version I used is Richard Karpinski at the Computer Center of the University of California (San Francisco, CA 94143-0704). His description of the program follows:

===== PARANOIA =====

A test program that evaluates the quality of a numerics environment. Note that numerics quality depends on the compiler used as well as the underlying system hardware and software.

Paranoia is a rather large program, devised by Prof. Kahan of Berkeley, to explore the floating point system on your computer. These files are being redistributed as encouraged in the note copied below.

Paranoia.f single precision Fortran, 29 Jan. 1986

Dear Fellow Paranoid,

We ask:

1. Please distribute these programs as widely as you like. Be sure to include as much help as possible. Please include these requests as well.

2. Please let me know if you can provide it on other media. Other potential users may be saved from retyping 2500 lines of code if you can provide the programs on a Whizbang 200 disk/tape/notched-stick. It is reasonable to ask money for this.

3. PLEASE let me know about any source changes that you made to make Paranoia work on your system. The exact model/version/date of your system is quite important in order to understand the changes. If you send the new version, please indicate where the changes occur. Machine readable is preferred.

4. Please send me your results. Note which version of Paranoia gave the results and what machine/language model/version etc. they apply to.

5. Suggestions and comments are always welcome.

Thank you for participating in this unique investigation of contemporary floating-point arithmetic. Your help is vital to the project.

Yours truly,

Richard Karpinski

Modula Assured Quality Software, 6521 Raymond Street

Oakland, CA 94609

ps: Send a stamped, self addressed envelope to the above address to get a sheet on the current status of the project at any time.

The program is too long to print here (104 K, enclosed in compressed form on the source code disk). Just to give you a feeling for what it does, here are some typical lines of code:

C... LOOK FOR SOME OBVIOUS MISTAKES
 IF (0.0E0+0.0E0 .EQ. 0.0E0 .AND.
     1     1.0E0-1.0E0 .EQ. 0.0E0 .AND.
     1     1.0E0       .GT. 0.0E0 .AND.
     1     1.0E0+1.0E0 .EQ. 2.0E0) GOTO 930
 FAILS=FAILS+1
 WRITE(OUT,920)
920FORMAT(‘ FAILURE: violation of  0+0=0  or  1-1=0  or  
     1  1>0  or 1+1 = 2.’)

You wouldn’t believe that these expressions could be evaluated the wrong way, but there must be a reason why these tests are done

Less obvious are some other mistakes that are tested by Paranoia. For instance, the basic arithmetic operations should carry some ‘guard digits’, that is, some more digits that are the representation of the floating point number in memory. Also, they should be correctly rounded in a way that doesn’t introduce inconsistencies. It is not trivial to design floating point arithmetic in such a way that roundoff errors do not affect the consistency of the result. This is seen when the Paranoia benchmark is compiled with the Language Systems (v3.0) and Absoft (v3.1.2) compilers, using various settings of the optimizations and other options.

First, the code produced by the Language Systems compiler, at any optimization level, does not produce any error messages at all, so the arithmetic seems to behave in a consistent way. The rounding conforms to the IEEE p754 standard.

Compiling the benchmark with Absoft MacFortran 3.1.2, with and without the basic optimizations, produces a lot of error messages, like these:

(1-u1)-1/2 < 1/2 is false, so this program may malfunction.

Multiplication lacks a guard digit violating 1*x = x .

Division lacks a guard digit violating x/1 = x .

Computed value of 1/1.00...001 is not less than 1 .

The errors are typical of floating point implementations where roundoff is not handled correctly; it seems to be mainly due to the fact that Absoft tries to keep intermediate values in registers as long as possible. These errors are not as serious as they look, since they are mainly deviations of one unit in the last significant digit of the single-precision numbers used in the test. Some of the error messages are actually a consequence of the fact that the program computes the machine precision at the beginning, from the minimum distance of two floating point numbers close to 1.0. The Absoft-optimized code without any further options comes up with a much too small value for this distance, and therefore some later tests, where this machine precision is used, report errors as well.

All these considerations may seem quite academic to you, because we’re really dealing with very small differences between the computed and the ‘true’ result, of the order of 10-8 or so. But problems where the precise computation of a small difference between two large numbers is important are not that rare, and in those cases such errors will quickly blow up. It is for this reason that the IEEE standard for floating point arithmetic has been developed, and that Apple has implemented the SANE package which follows the IEEE proposal.

There is a remedy, however: one can force the Absoft compiler (with the -e option) to use extended precision in all subexpression calculations, and store values to memory from the registers and re-load them after every assignment. That seems to make the Paranoia benchmark work correctly, and - almost - no more errors are reported. Only now, there are some numbers x and y where x*y is not equal to y*x! (See listing - I reprinted the part of the Paranoia benchmark that reported the error). The only way around this error, and the way to make the benchmark run in a fully consistent fashion, is to compile the code non-optimized and with the -e option. In this case, however, Absoft MacFortran loses all its speed advantage over Language Systems Fortran.

Speed tests with Whetstone and Linpack

To compare the speed figures for the Whetstone and Linpack benchmarks, we should therefore use the Absoft compiler at least with the -e option, and maybe also drop the optimizations. Since now both LSF and ABF compilers exist in versions that support 68040 code, I’ve compared the benchmarks both on a Mac IIx and on a Quadra 700. LSF was always run at the highest optimization level, since the arithmetic seems to be OK at that level; for Absoft, I used the basic optimizations (-O) with and without the extended precision option (-e).

Linpack (single precision)

LSF 030/882 code (Mac IIx) 0.12 MFlops

(Quadra 700) 1.32 MFlops

LSF 040 code (Quadra 700) 1.37 MFlops

ABF 030/882 code -O (Quadra 700) 1.30 MFlops

ABF 030/882 code -O -e (Quadra 700) 1.27 MFlops

ABF 040 code -O (Quadra 700) 1.60 MFlops

ABF 040 code -O -e (Quadra 700) 1.58 MFlops

Whetstone (single precision)

LSF 030/882 code (Mac IIx) 974 K

(Quadra 700) 3976 K

LSF 040 code (Quadra 700) 3984 K

ABF 030/882 code -O (Mac IIx) 1215 K

ABF 030/882 code -O -e (Mac IIx) 955 K

ABF 030/882 code -O (Quadra 700) 4051 K

ABF 030/882 code -O -e (Quadra 700) 3829 K

ABF 040 code -O (Quadra 700) 5864 K

ABF 040 code -O -e (Quadra 700) 5381 K

The essence of these figures is that there is no significant execution speed difference between Absoft and Language Systems Fortran on a Mac IIx, if you make sure that both generate arithmetically consistent code. On the Quadra, however, the fact shows up that Language Systems really creates almost the same code for 68030 and 68040 systems; no additional speed is gained using the -68040 option, while Absoft gains 24% on the Linpack benchmark and 40% on the Whetstone benchmark when 68040 code generation is switched on. All in all, Absoft code on the Quadra is 15% faster than LSF code for the Linpack and 35% for the Whetstone benchmark.

If you are running Fortran on anything other than a Quadra, LSF is really the only choice, given its excellent support of the Macintosh user interface, System 7 features such as AppleEvents, 100% VAX compatibility going into such details as the syntax of I/O statements, and its documentation. For pure numeric performance on a Quadra, Absoft still features faster execution. Still, I’d like to see Absoft’s ‘threaded math library’ for the 68040 incorporated into LSF; that would be my dream system.

Forth news

For the Forth readers of this column, I recently got news from the creators of two of the best public domain Forth development systems for the Macintosh. You read in MacTutor, Vol. 8, No. 4, August 1992 issue about the update of Mops (2.1), the object-oriented Forth implemented by Michael Hore. He now sent me the tutorial that he is distributing together with Mops, a 340K Microsoft Word file.

I’m not going to print the Mops Tutorial here, obviously. But if you need it and don’t find it on any of the obvious sources (ftp from oddjob.uchicago.edu or sumex-aim.stanford.edu), drop me some bytes at langowski@frembl.bitnet and I’ll be happy to mail the file to you.

Another message came from Chris Heilman, who created Pocket Forth:

From: N%”heilman@PC.bitnet”

To: angowski@FREMBL51.bitnet

CC:

Subj: Apple Events in Pocket Forth

Joerg:

Hello again. How have things been going for you? I read your latest article in MacTutor’s June (congrats by the way on getting it back together) about Apple Events in LS fortran. I’ve been working along exactly those lines.

Just two weeks ago I completed and released Pocket Forth 6. While release 5 was capable of handling high-level events, PF6 makes it easy and fun. Two new words, AE: and ;AE are used to define event handlers. Another word, ,S takes a 4 character token from the input stream and puts a 32 bit number on the stack. Use them like this:

  ,s misc ,s dosc AE: blah, blah blah, .... ;AE

This installs the dosc event handler into a list. The dictionary is then saved. The next time the program starts, it handles dosc events. Of course the four required events are handled automatically, but their actions can be changed at any time.

But wait, that’s not all! I’ve added SANE floating point for any numeric token with an ‘E’ or decimal point, new icons, drag&drop file loading and a rewritten manual in TeachText format.

I’d like to send you a copy, so expect a disk soon. I’d email a copy to you, but our system has been choking on loooong mail lately, and I’ve gotten real frustrated sending 200K files 3 or 4 times at 2400 bps.

Later, Chris Heilman

I’m looking forward to seeing the new version of Pocket Forth. Expect some lines in this column when I’ve reviewed it.

Example: check if multiplication commutes

C
Cvery short main program
C
 CALL COMMUT(20)
 PAUSE
 END
C
C
 SUBROUTINE COMMUT( NUMTRY)
C
 Implicit None
 
 INTEGER  DEFECT
 REAL   ULPPLS, ULPMIN

 REAL FP0, FP1, FP2, FP3, HALF
C
 INTEGER NUMTRY
 REAL R9, X, X9, Y, Y9, Z, Z9
 INTEGER I, NN
C

 FP0 = 0
 FP1 = 1
 FP2 = FP1+FP1
 FP3 = FP2+FP1
 HALF = FP1 / FP2
 ULPMIN = 5.96046440E-08
 ULPPLS = 2.0*ULPMIN
 
2920  WRITE(*,2921) NUMTRY
2921  FORMAT(/’ Does multiplication commute?’,
     1   ‘ Testing if  x*y = y*x  for’, I4,’ random pairs:’)
2930  R9 =  SQRT(FP3)
 I = NUMTRY + 1
 X9 = FP0 / FP3
2960  CALL RANDOM (X, Y, X9, R9)
 Y9=X9
 CALL RANDOM (X, Y, X9, R9)
 Z=X9*Y9
 Y=Y9*X9
 Z9=Z-Y
 I=I-1
 IF (I .GT. 0 .AND. Z9 .EQ. FP0) GOTO 2960
2970  IF (I .GT. 0) GOTO 3000
2980  X9=FP0+HALF/FP3
 Y9=(ULPPLS+ULPMIN)+FP0
 Z=X9*Y9
 Y=Y9*X9
 Z9=(FP0+HALF/FP3)*((ULPPLS+ULPMIN)+FP0)
     1 -((ULPPLS+ULPMIN)+FP0)*(FP0+HALF/FP3)
 IF (Z9 .NE. FP0) GOTO 3000
 WRITE(*,2990) NUMTRY
2990  FORMAT(‘ No failure found in ‘,I4,’ randomly chosen pairs.’)
 RETURN
3000  DEFECT=DEFECT+1
 WRITE(*, 3001) X9, Y9
 WRITE(*, 3002) Z, Y, Z9
 NN=NUMTRY-I+1
 WRITE(*, 3003) NN
3001  FORMAT(‘ DEFECT:  x*y = y*x  violated at  x = ‘,E15.7,’, y = ‘,
     1 E15.7)
3002  FORMAT(‘  x*y =’,E15.7,’,  y*x =’,E15.7,’,  x*y-y*x =’,E15.7)
3003  FORMAT(‘    ... pair no.’, I4)
 RETURN
 END
C--
 SUBROUTINE RANDOM (X, Y, X9, R9)
 REAL X, Y, X9, R9
2950  X=X9+R9
 Y=X*X
 Y=Y*Y
 X=X*Y
 Y=X-AINT(X)
 X9=Y+X*.000005
 RETURN
 END

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple Remote Desktop 3.9 - Remotely cont...
Apple Remote Desktop is the best way to manage the Mac computers on your network. Distribute software, provide real-time online help to end users, create detailed software and hardware reports, and... Read more
SoftRAID 5.5.6 - High-quality RAID manag...
SoftRAID allows you to create and manage disk arrays to increase performance and reliability. SoftRAID allows the user to create and manage RAID 4 and 5 volumes, RAID 1+0, and RAID 1 (Mirror) and... Read more
Apple Final Cut Pro X 10.3.2 - Professio...
Apple Final Cut Pro X is a professional video editing solution.Completely redesigned from the ground up, Final Cut Pro adds extraordinary speed, quality, and flexibility to every part of the post-... Read more
Logic Pro X 10.3.1 - Music creation and...
Logic Pro X is the most advanced version of Logic ever. Sophisticated new tools for professional songwriting, editing, and mixing are built around a modern interface that's designed to get creative... Read more
Paragraphs 1.1.4 - Writing tool just for...
Paragraphs is an app just for writers. It was built for one thing and one thing only: writing. It gives you everything you need to create brilliant prose and does away with the rest. Features... Read more
VueScan 9.5.70 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
TextSoap 8.3.2 - Automate tedious text d...
TextSoap can automatically remove unwanted characters, fix up messed up carriage returns, and do pretty much anything else that we can think of to text. Save time and effort. Be more productive. Stop... Read more
ForkLift 3.0 - Powerful file manager: FT...
ForkLift is a powerful file manager and ferociously fast FTP client clothed in a clean and versatile UI that offers the combination of absolute simplicity and raw power expected from a well-executed... Read more
Amazon Chime 4.0.5528 - Amazon-based com...
Amazon Chime is a communications service that transforms online meetings with a secure, easy-to-use application that you can trust. Amazon Chime works seamlessly across your devices so that you can... Read more
Sparkle 2.1.0 - $79.99
Sparkle will change your mind if you thought building websites wasn't for you. Sparkle is the intuitive site builder that lets you create sites for your online portfolio, team or band pages, or... Read more

Blasty Bubs is a colorful Pinball and Br...
QuickByte Games has another arcade treat in the works -- this time it's a mishmash of brick breaking and Pinball mechanics. It's called Blasty Bubs, and it's a top down brickbreaker that has you slinging balls around a board. [Read more] | Read more »
Corsola and Heracross are the new region...
Generation 2 finally launched in Pokémon GO, unleashing a brand new batch of Pokémon into the wild. Even before the update went live people were speculating on how to catch elusive Pokémon like the legendary "dogs", Unknown, and whether or not... | Read more »
The Warlock of Firetop Mountain (Games)
The Warlock of Firetop Mountain 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: An epic adventure through a mysterious mountain filled with monsters, magic and mayhem! “...it looks downright... | Read more »
Fantasy MMORPG MU Origin’s receives a hu...
Developer Webzen are looking to take their highly popular fantasy battler MU Origin to the next level this month, with its most ambitious overhaul yet. The latest update introduces the long sought after Server Arena, new treasure dungeons, and much... | Read more »
RPG Djinn Caster (Games)
RPG Djinn Caster 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: SPECIAL PRICE 38% OFF(USD 7.99 -> USD 4.99)!!!A Fantasy Action RPG of far foreign lands! Summon the Djinns and rise to... | Read more »
Alto's Odyssey gets its first trail...
There's finally video evidence of Alto's Odyssey, the follow up to the 2015 App Store hit, Alto's Adventure. It looks just as soothing and atmospheric as Alto's last outing, but this time players will be journeying to the desert. Whereas Alto's... | Read more »
Last week on Pocket Gamer
What’s going on in the wider world of portable gaming? Each week we ask that question of our sister website Pocket Gamer. The PG team covers iOS gaming, just like 148Apps, but it also strays into the world of Android games and handheld consoles... | Read more »
Pokémon GO Generation 2 evolution guide
At long last, Niantic Labs finally unleashed the Generation 2 Pokémon into the wild. Pokémon GO trainers are scrambling to grab up this new set of 80 Pokémon. There are some special new tricks required to catch all of these new beasties, though.... | Read more »
The best new games we played this week
It feels as though the New Year got off to a creaking start as far as mobile games go, but that's changed over the past few weeks. The last few days alone have seen the debut of a number of wonderful games, so we thought we'd take the time to... | Read more »
Recruit more scallywags and discover new...
Get ready to show off your sea legs all over again in Oceans & Empires’ new grand update, which aims to make the act of rising to the role of seven seas ruler even more fresh and appealing, thanks to a richness of new content on both iOS and... | Read more »

Price Scanner via MacPrices.net

Apple restocks refurbished 2015 and 2016 13-i...
Apple has Certified Refurbished 2015 and 2016 13″ MacBook Airs available starting at $759. An Apple one-year warranty is included with each MacBook, and shipping is free: - 2016 13″ 1.6GHz/8GB/128GB... Read more
13-inch 2.5GHz MacBook Pro (Apple refurbished...
Apple has Certified Refurbished 13″ 2.5GHz MacBook Pros (MD101LL/A) available for $829, or $270 off original MSRP. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.5GHz MacBook... Read more
QuickerTek Announces 5TB Apple AC AirPort Tim...
QuickerTek Inc. has announced their new 5TB hard drive upgrade for Apple’s AC AirPort Time Capsule. By customer request, this upgrade also features six external antennas and offers the highest... Read more
Apple Certified Refurbished iMacs available f...
Apple has Certified Refurbished 2015 21″ & 27″ iMacs available for up to $350 off MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: - 21″ 3.... Read more
Apple offering Certified Refurbished Series 1...
Apple is now offering Certified Refurbished Series 1 and Series 2 Apple Watches for 14-16% off MSRP, starting at $229. An Apple one-year warranty is included with each watch. Shipping is free: Series... Read more
1.4GHz Mac mini on sale for $449, save $50
B&H Photo has the 1.4GHz Mac mini on sale for $50 off MSRP including free shipping plus NY sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP Read more
12-inch Retina MacBooks on sale for $200-$250...
Newegg has the 12″ 1.2GHz Space Gray Retina MacBook (sku MLH82LL/A) on sale for $1349.99 including free shipping. Their price is $250 off MSRP, and it’s the lowest price available for this model.... Read more
13-inch 2.0GHz Space Gray MacBook Pro on sale...
Adorama has the non-Touch Bar 13″ 2.0GHz Space Gray MacBook Pro in stock today for $100 off MSRP. Shipping is free, and Adorama charges NY & NJ sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray... Read more
13-inch Touch Bar MacBook Pros on sale for $1...
B&H Photo has select 2016 Apple 13″ Touch Bar MacBook Pros in stock today and up to $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.9GHz/512GB Touch Bar MacBook... Read more
KSI-1802R SX Disinfect-able Keyboard With Wav...
KSI has unveiled a new, innovative medical keyboard, the KSI-1802R SX, at HIMSS 2017, running February 19-22 in Orlando, Florida. KSI-1802R SX is the only keyboard that combines dual factor... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
*Apple* Technician - nfrastructure (United S...
Let’s Work Together Apple Technician This position is based in Portland, ME Life at nfrastructure At nfrastructure, we understand that our success results from our Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.