Parallel and serial

Dear Prof Julian,
I have an input file for a system made of 7440 atoms. When I am trying to run the simulation using GULP in Parallel, the file is not working. There is no error massage or anything happen, it is just don’t give any output file. If I run the simulation using GULP in serial it works well.

If I run the simulation using the following syntax, there is no error and no output. The simulation isn’t working

  1. mpirun -np 4 gulp < input.gin > input.gout

When I am using the following syntax to run the file, I have a massager error :

“!! ERROR : input file is empty
Program terminated by processor 0 in getkeyword”

  1. mpirun -np 4 gulp input.gin
    I attached my input file, please if you could provide me with some suggestions.

One more thing to say, GULP in parallel works well on my machine for a small system like (1280 atoms).

Thank you!

CSH13_P.in (437.5 KB)

The first point here is addressed in the manual:

"If running in parallel, then it is recommended to use a different syntax to run GULP:

mpirun -np 4 gulp inputfile

Here mpirun is the command that launches a parallel job under MPI, 4 represents the number of cores on which to run (for example - other numbers up to the available number of cores are allowed) and inputfile here represents the name of your inputfile BUT without the .gin extension at the end. This will be added automatically and the output written to a file with the same root name, but with .gout at the end. Using this form of running GULP, as opposed to re-directing I/O with < and >, is better in parallel since it avoids a possible MPI error message relating to not being able to read the input fast enough."

For the second point, if you look at the above you’ll see you’ve got the syntax wrong in that if you specify the root name for the input as “input.gin” then the input file should be called “input.gin.gin” with the output being “input.gin.gout”.

Dear Prof Julian,
Thank you very much. Following your comment I was able to solve the problem.
Best,

Dear users and developers,

I compiled gulp for the parallel execution.
After ‘mpirun -np N input’ I see N processors running but in the output I see the line ‘Number of CPUs = 1’.

I am trying example69, in serial mode it took 12s and in parallel (mpirun -np2) it took 13s so it is unclear if it was really parallel.

How can I check the parallel execution?

Thank you.

If you are seeing that the number of CPUs in the output is 1 then the job is running in serial. Assuming the compilation was for the parallel version (mkgulp -m ), then it might be an issue with your MPI installation on your computer and how its configured. Normally it should just run on all N processors and show this in the output. It’s important to note that this doesn’t mean that things will always run faster since parallelism has an overhead and uses different algorithms. The change of algorithm often means that 2 processors doesn’t give a significant speed up, but things should get faster after that, though it depends if the system is large enough to benefit from parallelism.
Hope that’s some help,
Julian

1 Like

Sorry, I was wrong, parallel gulp was not compiled correctly (with ‘./mkgulp -m’).

The error is:

mpif90 -fallow-argument-mismatch datatypes.o <…> CS_dummy.o -L/usr/lib/x86_64-linux-gnu -lscalapack zdotc.o …/…/Utils/pGFNFF/Src//libpGFNFF.a -o gulp
/usr/bin/ld: cannot find -lscalapack: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [makefile:221: gulp] Error 1
mv: cannot stat ‘gulp’: No such file or directory

It was obtained with the following line added in mkgulp:
echo 'SLIBS=-L/usr/lib/x86_64-linux-gnu -lscalapack ’ >> makefile

Though scalapack for opempi is installed:
user@localhost: ls /usr/lib/x86_64-linux-gnu/*scalapack*
/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so /usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1.0
/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1

What could be the direction to look at?

Because library names and paths depend on your local computer and how it’s been configured, you need to edit mkgulp to set the library names and paths required for scalapack (and dependencies, such as blacs, pblas if necessary) to suit how you’ve set things up. If you have issues, you’ll need to talk to your local sys admin person or someone who is familiar with Linux.

Thank you for the reply. There is no sys admin or Linux expert available, so I will continue trying.

As mkgulp is written for mac (judjing by homebrew locations), I was wondering: Has any non-expert in Linux compiled GULP in parallel?
Maybe we could team up and share recipes of failure/success?

I’m sure lots of people have compiled in parallel under Linux, though they may not be able to help you much beyond the comments in the mkgulp file without giving them access to your system to look at where you’ve installed all the relevant packages. What needs to be done is edit the mkgulp file where you see “USER”. For example:

#–USER–Start

For homebrew installation of Scalapack:

           echo 'SLIBS=-L/opt/homebrew/lib -lscalapack ' >> makefile

echo 'SLIBS=-L/opt/local/lib -lscalapack ’ >> makefile

#–USER–End

You just have to change the -L option to specify where you’ve install the library & then give the name of the library (see documentation for whatever form of scalapack you installed). Just keeping adding any other libraries that are missing until all dependencies are resolved.