The Question is:
I'm looking for direction and resources in order to figure out how to increase
the speed of a Fortran complied program we're running under OpenVMS. It's
highly computational and repetitive in nature and doesn't create multiple
threads. Presently, we're
running it under OpenVMS V7.1-2 on a new XP1000 workstation with the EV6.7
processor. The program was originally compiled under Compaq Fortran V6.x.
We're looking at a SMP solution (DS20E with (2)EV6.7's) but have doubts that,
because of the single-threaded nature of our program, we won't see much speed
improvement over what we're achieving at present. Is DECthreads something we
should look at, in ord
er to break down the single thread? Should we recompile with V7.3 Fortran?
Any advice or direction you could point us in would be greatly appreciated. We
love VMS and want to stay with it for quite a few years to come.
Thanks in advance
The Answer is :
Seriously consider using a tool such as the Performance and Coverage
Analyzer (PCA; part of the Compaq DECset package), to determine exactly
what routine(s) are the most active ("hottest"). Then determine why
and how these "hot" routines are being used, and what you can do to
optimize the execution of these routines. This could be through
optimization of the routines, through techniques designed to allow
the compiler to better optimize the code, and through finding and
exploiting any available opportunities for increased processing
As for SMP systems, you need to find opportunities for parallelism
within the code in order to exploit a multiprocessor configuration,
via coding the application to use parallelism tools (DECthreads, PVM,
Linda, etc), via the use of multiple processes, or via various other
similar techniques. (For some of the basic background on the
computational theories behind this, please see Amdahl's Law and
Minsky's Conjecture...) For a single-threaded CPU-bound application,
the improvements resulting from an an SMP upgrade will be limited by
the about of processing that can be off-loaded to other processors and
thus permitting more processing for the single-threaded application.
Depending on what the code is doing, you may want to use compiler
command qualifiers such as /ARCHITECTURE=EV56 or /ARCHITECTURE=EV6
to ask the compiler to generate instructions available on these (and
later) generations of Alpha microprocessors. Depending on exactly
what the code is doing, this can provide you with faster execution.
The /OPTIMIZE=TUNE mechanism should generally be left to the default.
Use the current/latest compilers, particularly if you plan to use the
Programming-related topics include 1661 and 2681, among others.