Contents

Michael Hart Lecture on Project Gutenburg

Michael Hart, inventor of eBooks and founder of Project Gutenberg, will be in town Tuesday-Wednesday June 22-23. He will give a presentation, "A Million Dollar DVD," Wednesday evening, June 22, 7:00 pm at the Noel Wien Public Library in downtown Fairbanks.

Queue Changes on Klondike

Alert klondike users have read the "Message of the day" and "news queues" and already know that we're updating the X1 queues a bit. We're replacing the 30-minute "Quick" queues with one "debug" queue and we've increased the maximum run time for jobs in "small" from 8 to 16 hours and "medium" from 8 to 12 hours.

If you're doing debugging or development work, request 30 minutes or less, as always, but submit your job to "debug" instead of "default." To do so, simply change your qsub "-q" option to:

#PBS -q debug

Like the obsolescent "Quick" queues, the new "debug" queue has high priority for relatively rapid turnaround. When needed, ARSC staff will manually checkpoint work in other queues to allow jobs waiting in the "debug" queue to start. The "debug" queue will be pushed ahead twice per day at 9:00 AM and 2:00 PM Alaska Time.

There are two primary goals behind this change:

Formerly, the single "routing" queue, "default" serviced both the standard production queues and the high-priority "Quick" queues. Thus, there has been confusion between standard jobs which happen to be short versus debugging/development jobs which should have higher priority.

We're replacing four queues with one, and thus achieving a net simplification.

The "Quick" queues will be deleted next Wednesday, June 22. Users who forget to change their qsub scripts will suffer no ill-effects as the "default" routing queue will remain intact and continue to service all the standard queues (small, medium, large, and xlarge). See "news queues" for more detail.

Time Limits:

Many users require large processor counts to obtain sufficient memory and/or processing power, but some users have flexibility in choosing the number of processors to use. The walltime limits changes, it is hoped, will encourage users to not use more processors than they need.

Communication costs in parallel programs typically grow non-linearly with increasing processor counts. Thus, using fewer processors can reduce time spent in MPI or other communication routines and improve efficient use of the processors. Also, when a job which could be run on more processors is run on fewer, more memory per processor is used, which increases memory utilization.

With the new time limits, the maximum total CPU time which individual small or medium jobs can obtain is a bit closer to that which large jobs can obtain:

We will be watching the effects of these changes and we welcome your feedback.

X1: Update to Default Programming Environment, June 22

During scheduled downtime on June 22, 2005, PE 5.4 will be made the default PrgEnv. The current default, PE 5.3, will be preserved as PrgEnv.old.

PE5.4 has been available for user testing since April 20.

Following this change, the programming environments will be configured as follows:

PrgEnv.old : PE 5.3
PrgEnv (the default): PE 5.4
PrgEnv.new : PE 5.4

Floating Point Exception Handling with C99

The C99 standard provides an improved interface to deal with floating point exceptions.

The C99 header file "fenv.h" describes the interface to the new floating point exception routines, and defines the following macros to describe various floating point exceptions states:

FE_DIVBYZERO The dividend is finite/non-zero and divisor is zero.
FE_INEXACT The result is not represented exactly due to rounding,
etc.
FE_OVERFLOW The value is too large to represent (large positive
exponent).
FE_UNDERFLOW The value of the result is too close to zero to
represent (large negative exponent).
FE_INVALID Exception not covered by other exceptions (e.g. 0/0)
FE_ALL_EXCEPT all floating point exceptions (bitwise or'ed together)

Several functions provide the interface to deal with exceptions.

The function, fetestexcept, returns the values of any exceptions that are set from the input mask. To test for all floating point exceptions we would use the following:

flags = fetestexcept( FE_ALL_EXCEPT );

A non-zero return value indicates that an exception has occurred. The sample code, below, demonstrates one method for determining which exception(s) occurred.

Another routine, feclearexcept, resets the exception state for floating point operations for one or more exceptions. For example we could clear the inexact flag by using the following:

E.g.

feclearexcept( FE_INEXACT );

If desired, an exception state can be set using the function feraiseexcept.

E.g.

feraiseexcept( FE_DIVBYZERO );

What follows is a sample code which includes a function designed to cause an overflow exception (cleverly named "overflow"). The testFE function runs through all possible exception values and prints any that are set:

Both Cray and IBM both provide some degree of support for C99. In the case of the above program, it works as expected when using the IBM C99 compiler, however I couldn't get it to work properly on the X1. Also be aware that the C99 exception handling functionality is not defined in the C++ standard, so using "fenv.h" with C++ files may not work. Even if it does, it may not be portable to other compilers or systems.

The University of Alaska Fairbanks is an affirmative action/equal
opportunity employer and educational institution and is a part of the University
of Alaska system.
Arctic Region Supercomputing Center (ARSC) |PO Box 756020, Fairbanks, AK 99775 | voice: 907-450-8602 | fax: 907-450-8601 | Supporting high performance computational research in science and engineering with emphasis on high latitudes and the arctic.
For questions or comments regarding this website, contact info@arsc.edu