I'm trying to compile the test.f90 file included in the intel MPI distribution. I'm receiving the fllowing error:
837 fischega@susedev1[~/tmp/impi_test]> mpiifort -o myprog test.f90
/tools/intel/impi/4.1.0.024/intel64/lib/libmpi.so: file not recognized: File format not recognized
This is an x86_64 system:
839 fischega@susedev1[~/tmp/impi_test]> uname -a
Linux susedev1 126.96.36.199-0.21-smp #1 SMP Tue May 6 12:41:02 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
Here is the mpiifort -V output:
840 fischega@susedev1[~/tmp/impi_test]> mpiifort -V
Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 188.8.131.52 Build 20121010
Copyright (C) 1985-2012 Intel Corporation. All rights reserved.
I am sourcing the following files in my .bashrc:
. /tools/intel/icsxe/2013.0.028/bin/ictvars.sh intel64
. /tools/intel/composerxe/bin/compilervars.sh intel64
Does anyone know why I am encountering this error and how to fix it?
Can you do a quick "ls -l ./tools/intel/icsxe/2013.0.028"? I wonder if the PATHs are being mixed up somehow.
There's also no need for you to source all of these scripts. The ictvars.sh script already does the MPI and the Compose XE scripts for you. Unless you have a newer version of either component installed, I'd recommend just leaving the ictvars.sh and deleting the other two.
I changed my .bashrc to only source the ictvars.sh script, but it did not solve the problem. Here is the result of the "ls -l /tools/intel/icsxe/2013.0.028" command:
1004 fischega@susedev1[~/tmp/impi_test]> ls -l /tools/intel/icsxe/2013.0.028
lrwxrwxrwx 1 root root 29 2013-01-18 15:53 advisor_xe -> /tools/intel/advisor_xe_2013/
drwxr-xr-x 2 root root 83 2013-07-23 11:24 bin
lrwxrwxrwx 1 root root 36 2013-01-18 15:53 composer_xe -> /tools/intel/composer_xe_2013.1.117/
drwxr-xr-x 4 root root 4096 2013-01-18 15:53 doc
-rw-r--r-- 1 root root 1010 2012-10-19 07:35 icsxesupport.txt
-rwxr-xr-x 1 root root 3045 2013-01-18 15:53 ictvars.csh
-rwxr-xr-x 1 root root 2928 2013-07-23 11:24 ictvars.sh
lrwxrwxrwx 1 root root 23 2013-01-18 15:53 imb -> /tools/intel/imb/3.2.4/
lrwxrwxrwx 1 root root 31 2013-01-18 15:53 inspector_xe -> /tools/intel/inspector_xe_2013/
lrwxrwxrwx 1 root root 28 2013-01-18 15:53 itac -> /tools/intel/itac/8.1.0.024/
lrwxrwxrwx 1 root root 28 2013-01-18 15:53 mpi -> /tools/intel/impi/4.1.0.024/
drwxr-xr-x 2 root root 38 2013-01-18 15:53 release_notes
-rwxr-xr-x 1 root root 68416 2012-10-19 07:35 uninstall.sh
lrwxrwxrwx 1 root root 37 2013-01-18 15:53 vtune_amplifier_xe -> /tools/intel/vtune_amplifier_xe_2013/
Thanks, Greg. I'm not seeing anything wrong here. The error is indicative of some sort of 32bit vs. 64bit incompatibility although all of your commands seems fine.
Just in case, can you do: "file /tools/intel/impi/4.1.0.024/intel64/lib/libmpi.so"? It might tell you it's a symlink so do the "file" command on the symlink pointer as well.
Also, try your compile command with -show at the end:
$ mpiifort -o myprog test.f90 -show
That'll tell me exactly what libs are being linked in. Can you also compile a non-MPI program using ifort?
Just trying to isolate whether the issue is with the compiler or the MPI library.
Here is the result of "file /tools/intel/impi/4.1.0.024/intel64/lib/libmpi.so":
/tools/intel/impi/4.1.0.024/intel64/lib/libmpi.so: symbolic link to `libmpi.so.4.1'
When I use the "show" flag, I see the following:
ifort -ldl -o myprog test.f90 -I/tools/intel/impi/4.1.0.024/intel64/include -I/tools/intel/impi/4.1.0.024/intel64/include -L/tools/intel/impi/4.1.0.024/intel64/lib -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker /tools/intel/impi/4.1.0.024/intel64/lib -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/4.1 -lmpi -lmpigf -lmpigi -lrt -lpthread
The "/opt/intel/mpi-rt/4.1" is suspicous, since that location does not exist on the filesystem.
Yes, non-MPI programs can be compiled without problems.
I think you have a version of the compiler which didn't respect MPI paths (not even Intel MPI) if you set the compiler path afterwards. More recent compilers are intended not to put the co-array support library on LD_LIBRARY_PATH when Intel MPI is already set up; of course, you can over-rule the co-array support by setting up MPI paths afterwards.
I tried adding the following paths to the beginning of my LD_LIBRARY_PATH, but the problem still persists:
The LD_LIBRARY_PATH appears to contain a number of paths that do not exist:
Are these components that need to be installed? If so, what instructions should I give to my system administrator?
If you're trying to run on the MIC coprocessor, you must install the MPSS (linux for coprocessor), but I would advise you not to use such an old compiler with MPI and MIC; anyway, I don't think that version supports co-arrays on MIC. If you want to run full MPI rather than the ifort co-array support, you must install MPI separately. By default, the script to set Intel MPI paths would install in /opt/intel/impi/<version>/bin64/mpivars.
You would not expect the sysadmin to set your paths for you unless it is done by installing module http://linux.die.net/man/1/module when you would still need to run the module command with your desired option.
I'm not trying to run on the MIC coprocessor, so it sounds like the libraries ("mic/coi" and "mic/myo") are not applicable to my situation. Does your instruction of installing MPI separately only to use of the MPI with the MIC coprocessor? My understanding is that I should be able to link against Intel MPI "out of the box".
Is there anything else I can try to resolve the "/tools/intel/impi/4.1.0.024/intel64/lib/libmpi.so: file not recognized: File format not recognized" error?