Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7220 Discussions

Missing vml routine when compiling SCALAPACK

cyberto
Beginner
771 Views
Dear all,

I am trying to compile SCALAPACK 1.8.0 using Intel Compilers 9.1 and linking with Intel MKL 9.0 on a Pentium4 running Debian 32 bit. If I use only the -O3 flag everything works fine.
However, when I activate processor specific optimization -xP or -xN it gives me an error since there is a missining routine:

/opt/openmpi/bin/mpif77 -o /opt/scalapack-1.8.0/TESTING/xslu psludriver.o psluinfo.o psgetrrv.o psmatgen.o pmatgeninc.o pslaschk.o pslafchk.o /opt/scalapack-1.8.0/libscalapack.a /opt/BLACS/LIB/blacsF77init_MPI-LINUX-1.a /opt/BLACS/LIB/blacs_MPI-LINUX-1.a /opt/BLACS/LIB/blacsF77init_MPI-LINUX-1.a -L/opt/intel/mkl/9.0/lib/32/ -lmkl_lapack -lmkl_ia32 -lguide -L/opt/intel/mkl/9.0/lib/32/ -lmkl_lapack -lmkl_ia32 -lguide
/opt/scalapack-1.8.0/libscalapack.a(pslacon.o): In function `pslacon_':
pslacon.f:(.text+0x5a6): undefined reference to `vmlsRound4'

pslacon.f:(.text+0x626): undefined reference to `vmlsRound4'
pslacon.f:(.text+0x68e): undefined reference to `vmlsRound4'
pslacon.f:(.text+0x95e): undefined reference to `vmlsRound4'
pslacon.f:(.text+0x9de): undefined reference to `vmlsRound4'
/opt/scalapack-1.8.0/libscalapack.a(pslacon.o):pslacon.f:(.text+0xa46): more undefined references to `vmlsRound4' follow
make[1]: *** [/opt/scalapack-1.8.0/TESTING/xslu] Error 1
make[1]: Leaving directory `/opt/scalapack-1.8.0/TESTING/LIN'
make: *** [scalapackexe] Error 2


I guess this is a vector routine used by the compiler when it vectorizes some loop. However, it seems that no MKL library defines such a routine. Using nm I have seen that vmlsRound
is defined, but no vmlsRound4.

Does anybody have any clue about this?

Thanks
0 Kudos
3 Replies
TimP
Honored Contributor III
771 Views

If your mpif77 isn't built to use ifort as the compiler, it won't know all the required libraries. If it is built with ifort, including a similar vectorization option to the one you used when compiling will include the svml library automatically. It's better to set up so that you can use mpif77 -xW, for example, both to compile and to link, and minimize the extent to which you have to specify libraries explicitly. Most of this probably is an FAQ on the openmpi site.
0 Kudos
cyberto
Beginner
771 Views
Hi,
Thanks for your answer.
I compiled OpenMPI, BLACS, and SCALAPACK with the same compilers and optimization option, following the OpenMPI FAQ. Moreover, I checked that mpif77 binds ifort and mpicc binds icc.

The compiler does not find the symbol because I guess the symbol is not defined in MKL.

For example, if I look for the missing routine with

/opt/intel/mkl/9.0/lib/32$ nm * --print-file-name | grep -i vmlsRound4

it returns nothing, whereas

/opt/intel/mkl/9.0/lib/32$ nm * --print-file-name | grep -i vmlsRound

returns

libmkl_vml_def.so:0004e3b0 T _vmlsRound
libmkl_vml_p3.so:00058c64 T _vmlsRound
libmkl_vml_p4m.so:0008b390 T _vmlsRound
libmkl_vml_p4p.so:0008b3e0 T _vmlsRound
libmkl_vml_p4.so:0008be30 T _vmlsRound


Thanks again.
0 Kudos
Intel_C_Intel
Employee
771 Views

The need for the VML functions actually arise from the vectorization of operations in the compiled code, which is why you saw different behavior depending on optimization level. At higher levels of optimization there is vectorization of some operations which requires compiler run-time libary support. MKL linking behavior should never be dependent on the level of optimization used by the user to compile the program.

Bruce

0 Kudos
Reply