Computable Performance Metrics

Module 1: Floating Point Precision

MACHAR – Test for IEEE 754

Final

Module Author

Kris Stewart

Computer Science Department

http://www.stewart.cs.sdsu.edu/

W.M. Keck Foundation

This file: ComputablePerformanceMetrics1.htm

__Overview:__

Module 0: Floating Point Precision covered the task to find
a “computable” way to detect the actual manner in which a computer performed
arithmetic, developed by W.J. Cody [1] in 1988.
In that module, a minimal test was examined to compute a machine’s unit
round-off, the value *eps*
so that 1.0 + *eps*
= 1.0. Considering the extent to which
the FORTRAN subroutine MACHAR can compute the properties of a processor, some
may wish to examine the full range of values computed. This can be used to test if the user’s
computer platform actually follows the IEEE 754 Floating Point Standard [2].

__Introduction
to problem:__

There are several properties that characterize the behavior of a floating processing unit (FPU) in performing arithmetic. Module 0 focused on the machine round-off and for most situations this is adequate as a background for Module 2: Computing Error and Work Estimators. Given the effort the numerical analysis community put into debating and then specifying the IEEE-754 Floating-point standard, the acceptance by most computer floating point chip manufacturers of IEEE-754 and the current reconsideration of the 21 year old standard [3], an interesting class exploration of Cody’s computational experiment to determine the processor’s behavior on the system students actually use can be valuable. The FORTRAN code for MACHAR.F is available online from NETLIB [4] and can be used to determine the performance of the compute system you may use in your own courses or research.

__Statement
of the problem:__

What are the floating point properties of the machine
rohan.sdsu.edu which is used for classes at

__Background
Information:__

The reader should review the information presented in Module 0: Floating Point Precision and its references.

__Explanation
of the module used to solve the problem:__

We will compile and run the MACHAR.F program from W.F. Cody.

__Conceptual
questions to examine student’s understanding:__

Does your own computer satisfy the IEEE 754 Floating-point standard?

Does the Studio 11 FORTRAN 95 compiler, version 8.2, show that rohan.sdsu.edu satisfies IEEE 754 floating-point arithmetic?

__Problems
and projects:__

Download the routine MACHAR.F from NETLIB [4] and write your own driver program to call the subroutine and print out its results.

__Solutions:__

We provide a zip file containing MACHAR.F from NETLIB and a simple driver program, MACHAR_DRIVER.F. This routine was successfully compiled using

f90 machar_driver.f machar.f -o machar

machar > machar_out.txt

on the system rohan.sdsu.edu and resulted in the following output:

using machar_driver.f with call to machar.f

machar.f actually "computes" the machine constants

MACHAR CONSTANTS

IBETA = 2 radix

IT = 24 number of base ibeta digits in fraction

IRND = 5 0 if fl pt add chops; 1 if rounds

NGRD = 0 number guard digits for multiply

MACHEP = -23 largest negative integer 1+ibeta**macheps != 1. [!= means not equal]

NEGEP = -24 1-ibeta**negeps != 1.

IEXP = 8 number of bits in exponent

MINEXP = -126 largest negative integer ibeta^minexp for valid fl pt number

MAXEXP = 128 largest positive integer exponent for fl pt number

EPS = 1.1920929E-07 fl pt unit round-off of machine *Note: This is the same value as
our simple loop in Module 0*

EPSNEG = 5.9604645E-08

XMIN = 1.1754944E-38 smallest nonvanishing fl pt power of radix

XMAX = 3.4028235E+38 largest finite fl pt number

===========================================================

__Suggestions
to instructors for using the module:__

The author was in the position of writing mathematical
software for the Zilog Z80 chip, one of the first
floating point chips that was produced for computer hobbyists in the years
before the IBM PC arrived. She built her
own computer from a kit distributed by IMSAI in 1978 as the compute platform
for her Masters Thesis at SDSU. The
codes developed for her thesis were translations into BASIC of the software in *Computer Methods for Mathematical
Computations *[5] , a useful library for numerical
analysis published in 1977. This was a demonstration that small systems
could be used for numerical analysis on the 16 bit architecture of the Z80
Floating Point Unit. The codes in BASIC are
archived in the Guide to Available Mathematical Software (GAMS) at NIST [6]. With her Masters, she began to work with Fred
Krogh at the Jet Propulsion Laboratory, who had very
strong feelings on the process of writing quality mathematical software that
would run effectively on a wide range of computing platforms [7].

For anyone who wrote scientific software in the days before the standardization of the IEEE 754, the care that was needed to write code to be portable over the wide variety of computing platforms was important. Before the 1980’s, it might take a large investment of program designer time to move a code from, for example, an octal-based UNIVAC machine and have it run effectively on a hexadecimal-based IBM system. Luckily this is now history that supports the importance of standards and user-community involvement with the computer-producing marketplace. The IEEE 754-1985 standard was in place well before most current college students were born. One could say that the continued increase in performance predicted by Dr. Moore in 1965 is assisted by the tremendous reduction in cost by commoditization of the components of computers now. For those who wish to examine this exercise using the C programming language, a version of MACHAR.C is also available from NETLIB [8]. Additional background on the Anatomy of a Floating Point Number, with diagrams such as

and more are available, online, from WIKIPEDIA [9]. The author feels the class discussion can be completed in one 50 minute lecture, but it is an individual decision for each instructor how to weight the usefulness of this information. As John Seely Brown, former Chief Scientist at XEROX PARC, says our students are “Growing Up Digital” [10]. Our students studying computational science were born IEEE floating-point digital!

__References:__

`[1] W.J. Cody, Jr., Algorithm 665: {MACHAR}: A Subroutine to Dynamically Determine Machine Parameters". ACM Trans. on Mathematical Software (14), 1988.`

[2] IEEE 754 Floating-point Standard FAQ (Frequently Asked Questions) is available online from http://grouper.ieee.org/groups/754/faq.html

[3] IEEE has a group discussing updating the 21 year old 754 standard. Available online from http://grouper.ieee.org/groups/754/index.html

[4] NETLIB is the numerical analysis community collection of mathematical software, papers and databases available online from http://www.netlib.org/

MACHAR.F is part of the Basic Linear Algebra Subroutines (BLAS) in FORTRAN. Available online from http://www.netlib.org/blas/machar.f

[5] G.E. Forsythe,
M.A. Malcolm and C.B. Moler, *Computer Methods for Mathematical Computations, *Prentice-Hall,

[6] http://gams.nist.gov/serve.cgi/Package/SCRUNCH/

K. Stewart, Master’s
Project at SDSU, 1979. Code archived at
NIST through collaboration with David Kahaner. SCRUNCH = Small Crunch – A Numerical Analysis
Library in Basic for the Intel 8080 with Z80 floating point processor
computer. (Note,
this was prior to the IBM PC based on the 8086 chipset).

[7] F. Krogh, http://mathalacarte.com/,
now retired from the Jet Propulsion Lab and still very active in the
development of high-quality mathematical software, especially for optimization.

[8] NETLIB distributes a main program and C version also. Available online from http://www.netlib.org/blas/machar.c

[9] IEEE floating-point standard from Wikipedia gives an excellent article on the “Anatomy of a floating-point number”. Available on line from http://en.wikipedia.org/wiki/IEEE_floating-point_standard

[10] John Seely Brown, “Growing up Digital”, Change, March/April 2000, pp. 10-20. Also available online from Dr. Brown’s home page (under Publications):

http://www.johnseelybrown.com/Growing_up_digital.pdf