[Pw_forum] Compiling with intel fortran, MKL and MKL FFT wrappers
Serge Nakhmanson
nakhmanson at anl.gov
Tue Sep 30 20:18:35 CEST 2008
Lorenzo, Axel,
Thank you for your comments. I expected the serial lib
to be "it" but decided to check in with the forum just
to be sure. I have not tested the new "MKL FTT" binary
extensively yet but I will. As I understand, I should not
expect a tremendous performance improvement over plain
vanilla fftw2 lib, however, if I see something interesting
I will drop a line here.
What is given below is a comment to answer Vega's questions.
It could be skipped unless one's interested in the nitty-gritty
details and/or wants to find and expose flaws in my operating
procedures.
> could you tell me which dir should be added to the LD_LIBRARY_PATH, or which
> flags should be added after the QE configure command?
Vega,
Here's what you can do, if, against Axel's advice, you
just gotta have an MKL FFT binary in your {espresso}/bin.
I usually do not use configure. Instead I edit make.sys
directly, which seems to be much more convenient. If you
take a look at the end of my original message you will
see how I set all the important flags (including include
and lib paths) to compile everything without problems.
The only thing you have to do is put in your own paths
to MKL instead of my paths.
Regarding the FFT_LIBS flag, by default, my sysadmin placed
all the compiled MKL FFT libs into {mkl}/{number}/lib/64
but you can place them anywhere as long as you provide a
correct path to them in make.sys.
Regarding the LD_LIBRARY_PATH, I usually set it inside my
PBS job script, e.g.,
#
# Set up some compiler-dependent things:
#
if [ $COMPILER = intel ]; then
# Set up some things to run an Intel-compiler binary:
MPIRUN=/usr/local/bin/mpiexec
MPIFLAGS='-verbose -kill'
export
LD_LIBRARY_PATH=/usr/local/intel/mkl/10.0.4.023/lib/em64t/:$LD_LIBRARY_PATH
elif [ $COMPILER = pgi64 ]; then
{do something else here}
else
echo "Compiler $COMPILER unsupported for parallel execution"
exit 1
fi
You can then check if all the appropriate libs are found correctly
by doing "ldd your_binary.x" (in the same PBS script, of course)
before you run it:
# Run the job in /<local scratch>/<run>:
DATE=`date`
echo ""
echo "Time at the start of the job is: $DATE"
echo ""
cd $SCRATCH/$RUNDIR
echo ""
echo "ldd pw.x:"
ldd $SCRATCH/$RUNDIR/pw.$ARCH.x
echo ""
echo ""
echo "Running the job:"
echo "$MPIRUN $MPIFLAGS $SCRATCH/$RUNDIR/pw.$ARCH.x $NPOOL <
$SCRATCH/$RUNDIR/$NAME.$PREFIX.pw.inp > $SCRATCH/$RUNDIR/$NAME.$PREFIX.pw.out"
echo ""
$MPIRUN $MPIFLAGS $SCRATCH/$RUNDIR/pw.$ARCH.x $NPOOL <
$SCRATCH/$RUNDIR/$NAME.$PREFIX.pw.inp > $SCRATCH/$RUNDIR/$NAME.$PREFIX.pw.out
DATE=`date`
echo ""
echo "Time at the end of the job is: $DATE"
echo "Doing some housekeeping duties..."
echo ""
Here's a sample output from this part of the script that I get on my cluster,
which shows that at least the MKL libraries from BLAS_LIBS and LAPACK_LIBS
are found correctly:
> Time at the start of the job is: Mon Sep 29 17:37:18 CDT 2008
>
>
> ldd pw.x:
> libmkl_intel_lp64.so =>
/usr/local/intel/mkl/10.0.4.023/lib/em64t/libmkl_intel_lp64.so (0x0000002a95557000)
> libmkl_sequential.so =>
/usr/local/intel/mkl/10.0.4.023/lib/em64t/libmkl_sequential.so (0x0000002a9586d000)
> libmkl_core.so =>
/usr/local/intel/mkl/10.0.4.023/lib/em64t/libmkl_core.so (0x0000002a95a1a000)
> libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x000000375f300000)
> librt.so.1 => /lib64/tls/librt.so.1 (0x000000375e900000)
> libm.so.6 => /lib64/tls/libm.so.6 (0x000000375e300000)
> libc.so.6 => /lib64/tls/libc.so.6 (0x000000375de00000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000375eb00000)
> libdl.so.2 => /lib64/libdl.so.2 (0x000000375e100000)
> /lib64/ld-linux-x86-64.so.2 (0x000000375dc00000)
>
>
> Running the job:
> /usr/local/bin/mpiexec -verbose -kill /scratch/nakhmanson/PWtest3/pw.test.x
-npool 2 < /scratch/nakhmanson/PWtest3/C1c.relaxed.pw.inp > /scratch/nakhmanson/PWt
> est3/C1c.relaxed.pw.out
>
> mpiexec: resolve_exe: using absolute path
"/scratch/nakhmanson/PWtest3/pw.test.x".
> mpiexec: process_start_event: evt 2 task 0 on node09.cluster.
> mpiexec: read_p4_master_port: waiting for port from master.
> mpiexec: read_p4_master_port: got port 33007.
> mpiexec: process_start_event: evt 4 task 1 on node09.cluster.
> mpiexec: All 2 tasks (spawn 0) started.
> mpiexec: wait_tasks: waiting for node09.cluster node09.cluster.
> mpiexec: process_obit_event: evt 3 task 0 on node09.cluster stat 0.
> mpiexec: process_obit_event: evt 5 task 1 on node09.cluster stat 0.
>
> Time at the end of the job is: Mon Sep 29 17:41:03 CDT 2008
> Doing some housekeeping duties...
Hope this helps,
Serge
--
*********************************************************
Serge M. Nakhmanson phone: (630) 252-5205
Assistant Scientist fax: (630) 252-4798
MSD-212, Rm. C-224
Argonne National Laboratory
9700 S. Cass Ave.
Argonne, IL 60439
*********************************************************
More information about the Pw_forum
mailing list