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).