GAMESS on Intel 32 bit architecture (IA32) (Linux, all tests for Pentium4)
Very serious bug found in MKL 7.2 (Intel BLAS library).
GAMESS is the software package that we have chosen as our basis platform
for FMO method development.
GAMESS comes with comp/lked scripts that compile it on various machines.
On IA32/Linux the default way is to use g77.
We have performed much benchmarking and established that using
the free Intel
Fortran compiler gives about 20% speed-up over g77. This was done for
certain versions of both and the ratio can not be expected to stay constant.
We also tried Portland Group Fortran but again Intel compiler was the best
for GAMESS. Now, this ratio was obtained for RHF, that is, the difference
comes mostly from two-electron integrals. For correlated wave functions
BLAS efficiency is very important (BLAS usage is negligible for RHF/DFT).
We have tested several BLAS libraries and established that
the free Intel MKL library is the best.
Therefore, we recommend Intel compiler/BLAS library to compile GAMESS on IA32.
We have determined the best set of optimisation options for three
versions of Intel compiler, 7.0, 8.1 and 9.0.
Regretfully 8.0 and 8.1 Intel compilers have a very serious I/O problem
(which is thought to be caused by the bufferisation of the output).
This problem is specific to 8.0 and 8.1 versions only and disappeared in 9.0.
On the other hand, 9.0 has a very bizarre compiling problem: when using a certain option combination
for int2r.src, compiler simply freezes. Practically, I split
int2r.src into two files and use a different set of options for each to
circumvent the compiler bug but I do not deem this a good way to recommend to others,
thus I combined the options for int2r.src which I think are safe (but which I do not
use myself).
I have installed Intel Fortran 10.0 (025) and MKL 9.1 (018) and tested
both. The options for 9.0 worked mostly, except for int2c, dftgrd and prpel
(which required changes to avoid compiler bugs and overoptimisation).
I have measured the performance of these two updates versus ifort 9.0 and
MKL 8.0.1, for RHF, DFT, MP2 and CC calculations on Pentium4. I found that MKL
9.1 has almost the same (slightly worse) performance than MKL 8.0.1.
ifort 10.0, on the other hand, has a disasterously poor perfomance.
RHF (DIRSCF) and MP2 (IMS) are slower by about 20% and 9%, respectively.
One good thing about ifort 10.0: the infamous compiler bug that caused it to
hang when compiling int2r.src is mended.
I did optimise options for 9.0 and did not for 10.0.
However, I do not foresee a better performance than for 9.0 (for Pentium4,
that is; for other CPUs no idea). So, once again.
My recommendation is 9.0. The latest MKL version 8.0 has no problems as
far as GAMESS is concerned.
Be aware that compiler optimisation DOES make the code work incorrectly frequently.
GAMESS source is being constantly updated (and so are compilers). DO run all standard tests
once you use the set of options provided by us.
UNDER ANY CIRCUMSTANCES, DO NOT assume that you can use our set of options for any other
version. We can almost guarantee that some code will give wrong results or, if you are lucky,
will just hang or abort. Furthermore, the safest set is for 9.0 since this is what we are using
ourselves.
Based on reliable communications, it is inferred that the options below
MAY NOT work in some cases. Specifically, they work for single core Pentium4
and Xeon. The options are thought to fail in 64 bit mode.
Options for ifc 7.0
Options for ifort 8.1
Options for ifort 9.0
No options for ifort 10.0
These instructions below are a little out dated. The new
comp script has sections for different compilers, and it should be easy to
adjust the advice below to this new way.
Here is how to use our options: find the "if" statement in "comp" that applies to IA32.
The comp script looks like this:
if ($TARGET == linux-pc) then
set OPT = '-O2'
Then replace everything inside the "if" clause by our set. As for MKL, you should change "lked".
Look for "linux-pc" and BLAS assignment, like this:
if ($TARGET == linux-pc) then
set LDR='g77'
Set BLAS path for your system in "set BLAS". You will need to change g77
into ifc too.
Finally, in order to use any Intel compiler, you need to change
ddi/compddi script. Find "if($TARGET == linux-pc) then" and change
set F77_OPTS = '-DINT_SIZE=int -D_UNDERSCORES=2'
into
set F77_OPTS = '-DINT_SIZE=int -D_UNDERSCORES=1'
This will change the number of underscore characters expected in
module name in object files (compiler dependent).