|
New Features
Prefetch optimizations for PIII and Athlon.
"We tested v5.7¡¯s prefetch optimization on a 1.4GHz Athlon, with 256MB DDE 133 SDRAM, running Windows 2000 Pro SP2 using Polyhedron¡¯s (www.polyhedron.com) Fortran 77 and 90 benchmarks. Using the "-prefetch 1" switch, the 77 benchmarks ran an average of 12.9% faster than they did when built with LF95 v5.6. The 90 benchmarks ran an average 2.8% faster. See Fortran SOURCE, Volume 17, Issue 2, "What is Prefetch?" for a description of the prefetch optimization."
Improvements in logical conditional processing.
The processing of complex logical expressions is improved with optimization level 1 (-o1). For example, the Polyhedron benchmark program PNPOLY.FOR contains the following logical IF block (PNPOLY is a logical function):
IF ( (((Yp(i).LE.Y) .AND. (Y.LT.Yp(j))) .OR.
&((Yp(j).LE.Y) .AND. (Y.LT.Yp(i)))) ) THEN
IF ( X.LT.((Xp(j)-Xp(i))*
& ( (Y-Yp(i))/ (Yp(j)-Yp(i)) )+Xp(i)) )
& PNPOLY = .NOT.PNPOLY
ENDIF
Compiled with LF95 v5.7 and -o1, the performance of PNPOLY is increased by 65% over PNPOLY built with previous versions of LF95.
Microsoft Incremental Linker (link) included.
Link replaces 386|LINK and offers the following advantages:
?Automatically converts Object Module Format (OMF) object files to Common Object File Format (COFF) enabling OMF and COFF objects to be linked together into the same executable.
?Automatically generates Microsoft-compatible import libraries whenever a DLL is created. The ability to use Microsoft import libraries streamlines the process of linking mixed-language DLLs.
?Allows faster linking of large programs. Link doesn¡¯t completely regenerate an executable file, it only replaces objects in the .exe that have changed since the last link.
Allows you to insert comments into executable files. This facilitates versioning and fingerprinting.
Fortran runtime libraries as DLLs.
A copy of the Fortran runtime is provided as a collection of DLLs. Dynamic linking with the Fortran runtime allows multiple executables to use the same copy of the Fortran runtime, thereby reducing the size of each executable. It also maintains continuity of I/O between code residing in a main program and code residing in a DLL. For example, a unit number can be opened in a main program and passed to code in a DLL. The DLL will be able to perform I/O operations on the opened unit. It is not possible to do this with a statically linked runtime because the program and the DLL would each have its own copy of the runtime and the runtime in the DLL would not be aware of connections made by the runtime in the main program. The new ?nstaticlib switch links with the DLL runtime. Note that user-created programs that are distributed still need to be linked with the static runtime libraries ? users of LF95 do not have license to redistribute the Fortran runtime DLLs.
IEEE Standard 754 support
IEEE Standard 754 defines the representation and behavior of 32- and 64-bit floating point numbers. IEEE 754 support provides for consistency of basic computational results among platforms that use IEEE 754. An excellent overview of the standard is presented online by Steve Hollasch at http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html. A heavy-duty online discussion of floating point numbers and the standard is provided by David Goldberg at http://docs.sun.com/source/806-3568/index.html.
Stack option changes
The default stack size is now 1MB (compared to 100K in v5.6). A new stack option accepts both reserve and commit arguments: -stack n[:m] (where n=reserve, m=commit). The maximum amount of stack is not automatically committed at the time the program is loaded. This can lead to faster load times for LF95 executables. Additional stack is allocated as needed with increases controlled by the commit argument. Even after a program is linked, the maximum amount of stack (specified by the reserve argument) and how much the stack is increased when more is required (specified by the commit argument) can be modified using the included "editbin" utility.
New Winteracter Starter Kit (WiSK)
The new WiSK is based on Winteracter v4.10. Following are some of the new features:
¡Ü
A new Resource Editor combines and improves the old menu and dialog editors and adds an image editor for icon, cursor, and bitmap-button creation. This substantially streamlines resource file maintenance.
¡Ü
The included Winteracter Application Wizard provides a quick and easy method of generating a reasonably substantial starter application tailored to your needs.
¡Ü
A major new graphics text subroutine group supersedes the old TX/FS/CL/GC groups. New features include access to any Windows font, rotated text, vertical text, elimination of character set files, and native proportional spacing.
¡Ü
Numerous other enhancements: Graphics can now be redirected to a dialog field instead of to a window. Windows and dialogs can now be combined. Menus can now be added to child windows in addition to the root window. Status bar help prompts can be attached to menu items. Support for progress bars is added. Routines to change the state of a field and move the cursor to a specific field are added. Mouse cursor is selectable and mouse double clicks are reported.
New features in SSL2 (Scientific Subroutine Library 2)
Linear Algebra
¡Ü
The inverse of a positive-definite symmetric matrix decomposed into the factors L, D and L(T)
¡Ü
System of linear equations with an unsymmetric or indefinite sparse real matrix (BICGSTAB(L) method)
¡Ü
Multiplication of a real band matrix and a real vector
Eigenvalue problems
¡Ü
Eigenvalues and eigenvectors of Hermite matrices
¡Ü
Eigenvalues and eigenvectors of real symmetric matrices
Transforms
¡Ü
Singlevariate, multiple, and multivariate discrete real Fourier transform (mixed radix)
¡Ü
Singlevariate, multiple, and multivariate discrete complex Fourier transform (mixed radix, complex array)
Random numbers
¡Ü
Generation of normal random numbers (Wallace¡¯s method)
MATLAB compatibility
Integration files are provided to support using the LF95 compiler within MATLAB. These files provide seamless integration with MATLAB and external API procedures. MATLAB example code should not require any modification when LF95 support is enabled. Click here for download.
Other new features
¡Ü
The following Microsoft tools are included:
Library manager, lib (Lahey¡¯s LM is still included)
Make utility, nmake (Polyhedron¡¯s Automake is still included)
Binary-file dumper, dumpbin
Binary-file editor, editbin
¡Ü
Microsoft¡¯s C-runtime library (replaces Borland¡¯s).
¡Ü
Removed runtime limitation on number of open files.
¡Ü
New -wide option for fixed-format source extending to column 256.
¡Ü
Column position of offending code identified in compilation messages where possible.
¡Ü
More mixed-language programming examples.
¡Ü
Improved Language Reference, User¡¯s Guide, and WiSK Reference.
LF95 Performance
LF95 5.7 offers improved execution performance on most Fortran 77 and 90 codes. The new prefetch optimizations help performance on PIII and Athlon chips. "We tested v5.7¡¯s prefetch optimization on a 1.4GHz Athlon, with 256MB DDE 133 SDRAM, running Windows 2000 Pro SP2 using Polyhedron¡¯s (www.polyhedron.com) Fortran 77 and 90 benchmarks. Using the "-prefetch 1" switch, the 77 benchmarks ran an average of 12.9% faster than they did when built with LF95 v5.6. The 90 benchmarks ran an average 2.8% faster. See Fortran SOURCE, Volume 17, Issue 2, "What is Prefetch?" for a description of the prefetch optimization."
LF95 Optimizations
Basic Optimization
¡Ü
Constant folding
¡Ü
Common subexpression elimination
¡Ü
Copy propagation
¡Ü
Strength Reduction
¡Ü
Algebraic simplifications
¡Ü
Dead code elimination
¡Ü
Peephole optimization
¡Ü
Loop invariant code motion
¡Ü
Transform array element to simple variable
¡Ü
Local Instruction scheduling
¡Ü
Address calculation optimization
Program Reconstruction Optimizations
¡Ü
Loop unrolling
¡Ü
Loop interchange
Procedure Optimization
¡Ü
Inlining mathematical functions
¡Ü
Stack optimization
Others
¡Ü
I486/Pentium/Pentium PRO instruction selection
¡Ü
Using fast input/output libraries
¡Ü
Prefetch Pentium III / Athlon
Statically Link Fujitsu C and VC++ Object Files
LF95 supports static linking with Fujitsu C and Microsoft Visual C++ version 2.0 and greater. Combine your Fortran and C/C++ code into one executable. For the routines you don't want to develop yourself, you can also link with C/C++ routines from commercially available libraries.
DLL Interfaces to Visual Basic, VC++, Borland C++, Delphi, Microsoft .NET languages.
Create 32-bit Windows DLLs from your Fortran routines and call the Fortran routines from 32-bit Windows programs created with Microsoft Visual Basic, Microsoft Visual C++, Borland C++, Borland Delphi, and Microsoft .NET languages.
Win32 API Access
LF95 supports direct calls from Fortran to functions in the Win32 API. For a narrow range of applications, this might be the last little bit of glue you need to pull off your project. Note that this is not for the faint-hearted! You'll need to be a Windows programmer to get all but the most basic functionality. That's because the API was written to be called from C. And consequently, arguments need to be passed as C expects them. Structures and callback routines pose additional problems. Clearly, this would be a difficult way to build a Windows application from scratch.
Legacy Fortran Support
LF95 extends its language support in other directions adding many legacy Fortran features, including VAX structures and the various UNIX service routines. These features further facilitate your move to cost/performance efficiency on the PC platform:
¡Ü
Unlimited number of continuation lines in free or fixed source form
¡Ü
DO UNTIL statement
¡Ü
FIND statement
¡Ü
STRUCTURE and END STRUCTURE statements
¡Ü
UNION and END UNION statements
¡Ü
MAP and END MAP statements
¡Ü
RECORD statement
¡Ü
Non-standard POINTER statement
¡Ü
AUTOMATIC statement
¡Ü
STATIC statement
¡Ü
VALUE statement
¡Ü
BYTE statement
¡Ü
Hollerith constants
¡Ü
Alternative forms of binary, octal, and hexadecimal constants
¡Ü
Binary, octal, or hexadecimal constants in a DATA, declaration statement
¡Ü
Period structure component separator
¡Ü
IMPLICIT UNDEFINED statement
¡Ü
Namelist input/output on internal file
¡Ü
FORM = 'BINARY'
¡Ü
TOTALREC specifier
¡Ü
STATUS = 'SHR'
¡Ü
Gw, $, \, and R edit descriptors
¡Ü
LOC intrinsic function
¡Ü
The following service subroutines: ABORT, BEEP, BIC, BIS, CLOCK, CLOCKM, DATE, EXIT, ERRSAV, ERRSTR, ERRSET, ERRTRA, FDATE, FREE,GETARG, GETDAT, GETLOG, GETPARM, GETTIM, GMTIME, IBTOD, IDATE, IETOM, ITIME, IVALUE, LTIME, MTOIE, PERROR, PRNSET, QSORT, SETRCD, SETBIT, SIGNAL, SLEEP
¡Ü
The following service functions: ACCESS, ALARM, BIT, CHDIR, CHMOD, CTIME, DRAND, DTIME, ETIME, FGETC, FPUTC, FSEEK, FSTAT, FTELL, GETC, GETCWD, GETFD, GETPID, HOSTNM, IARGC, IERRNO, INMAX, IOINIT, IRAND, JDATE, KILL, LNBLNK, LONG, LSTAT, MALLOC, NARGS, PUTC, RAN, RAND, RENAME, RINDEX, RTC, SECOND, SECNDS, SETDAT, SETTIM, SHORT, STAT, TIME, TIMEF, UNLINK
ANSI/ISO-Compliant Fortran 95
LF95 is a complete implementation of the ANSI/ISO Fortran 95 standard. Fortran 95 offers some small but important improvements over Fortran 90, including the ability to create your own elemental procedures, default initialization for structure components, the NULL intrinsic for initializing pointers, the FORALL construct, and a standard CPU_TIME intrinsic procedure.
|