I am trying to build NAS benchmarks using Intel MPI and
below is the makefile that I am using.
#---------------------------------------------------------------------------
#
# SITE- AND/OR PLATFORM-SPECIFIC
DEFINITIONS.
#
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Items in this file will need to be changed for
each platform.
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Parallel Fortran:
#
# For CG, EP, FT, MG, LU, SP and BT, which are in
Fortran, the following must
# be defined:
#
# MPIF77 - Fortran compiler
# FFLAGS - Fortran compilation arguments
# FMPI_INC - any -I arguments required for
compiling MPI/Fortran
# FLINK - Fortran linker
# FLINKFLAGS - Fortran linker arguments
# FMPI_LIB - any -L and -l arguments required for
linking MPI/Fortran
#
# compilations are done with $(MPIF77) $(FMPI_INC)
$(FFLAGS) or
# $(MPIF77) $(FFLAGS)
# linking is done with $(FLINK) $(FMPI_LIB)
$(FLINKFLAGS)
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# This is the fortran compiler used for MPI programs
#---------------------------------------------------------------------------
MPIF77 = gfortran
# This links MPI fortran programs; usually the same
as ${MPIF77}
FLINK =
$(MPIF77)
#---------------------------------------------------------------------------
# These macros are passed to the linker to help link
with MPI correctly
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# These macros are passed to the compiler to help
find 'mpif.h'
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Global *compile time* flags for Fortran programs
#---------------------------------------------------------------------------
FFLAGS =
-O
#---------------------------------------------------------------------------
# Global *link time* flags. Flags for increasing
maximum executable
# size usually go here.
#---------------------------------------------------------------------------
FLINKFLAGS = -O
#---------------------------------------------------------------------------
# Parallel C:
#
# For IS, which is in C, the following must be
defined:
#
# MPICC - C compiler
# CFLAGS - C compilation arguments
# CMPI_INC - any -I arguments required for
compiling MPI/C
# CLINK - C linker
# CLINKFLAGS - C linker flags
# CMPI_LIB - any -L and -l arguments required for
linking MPI/C
#
# compilations are done with $(MPICC) $(CMPI_INC)
$(CFLAGS) or
# $(MPICC) $(CFLAGS)
# linking is done with $(CLINK) $(CMPI_LIB)
$(CLINKFLAGS)
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# This is the C compiler used for MPI programs
#---------------------------------------------------------------------------
MPICC = cc
# This links MPI C programs; usually the same as
${MPICC}
CLINK =
$(MPICC)
#---------------------------------------------------------------------------
# These macros are passed to the linker to help link
with MPI correctly
#---------------------------------------------------------------------------
CMPI_LIB = -L/usr/local/lib -lmpi
#---------------------------------------------------------------------------
# These macros are passed to the compiler to help
find 'mpi.h'
#---------------------------------------------------------------------------
CMPI_INC = -I/usr/local/include
#---------------------------------------------------------------------------
# Global *compile time* flags for C programs
#---------------------------------------------------------------------------
CFLAGS =
-O
#---------------------------------------------------------------------------
# Global *link time* flags. Flags for increasing
maximum executable
# size usually go here.
#---------------------------------------------------------------------------
CLINKFLAGS = -O
#---------------------------------------------------------------------------
# MPI dummy library:
#
# Uncomment if you want to use the MPI dummy library
supplied by NAS instead
# of the true message-passing library. The include
file redefines several of
# the above macros. It also invokes make in
subdirectory MPI_dummy. Make
# sure that no spaces or tabs precede include.
#---------------------------------------------------------------------------
# include ../config/make.dummy
#---------------------------------------------------------------------------
# Utilities C:
#
# This is the C compiler used to compile C
utilities. Flags required by
# this compiler go here also; typically there are
few flags required; hence
# there are no separate macros provided for such
flags.
#---------------------------------------------------------------------------
CC =
cc -g
#---------------------------------------------------------------------------
# Destination of executables, relative to subdirs of
the main directory. .
#---------------------------------------------------------------------------
BINDIR =
../bin
#---------------------------------------------------------------------------
# Some machines (e.g. Crays) have 128-bit DOUBLE
PRECISION numbers, which
# is twice the precision required for the NPB suite.
A compiler flag
# (e.g. -dp) can usually be used to change DOUBLE
PRECISION variables to
# 64 bits, but the MPI library may continue to send
128 bits. Short of
# recompiling MPI, the solution is to use MPI_REAL
to send these 64-bit
# numbers, and MPI_COMPLEX to send their complex
counterparts. Uncomment
# the following line to enable this substitution.
#
# NOTE: IF THE I/O BENCHMARK IS BEING BUILT, WE USE
CONVERTFLAG TO
# SPECIFIY THE FORTRAN RECORD LENGTH UNIT. IT
IS A SYSTEM-SPECIFIC
# VALUE (USUALLY 1 OR 4). UNCOMMENT THE SECOND
LINE AND SUBSTITUTE
# THE CORRECT VALUE FOR "length".
# IF BOTH 128-BIT DOUBLE PRECISION NUMBERS AND
I/O ARE TO BE ENABLED,
# UNCOMMENT THE THIRD LINE AND SUBSTITUTE THE
CORRECT VALUE FOR
# "length"
#---------------------------------------------------------------------------
# CONVERTFLAG
= -DCONVERTDOUBLE
# CONVERTFLAG
= -DFORTRAN_REC_SIZE=length
# CONVERTFLAG
= -DCONVERTDOUBLE -DFORTRAN_REC_SIZE=length
#---------------------------------------------------------------------------
# The variable RAND controls which random number
generator
# is used. It is described in detail in
README.install.
# Use "randi8" unless there is a reason to use
another one.
# Other allowed values are "randi8_safe", "randdp"
and "randdpvec"
#---------------------------------------------------------------------------
RAND = randi8
# The following is highly reliable but may be slow:
# RAND = randdp
When I try to build let's say EP benchmark ***make
NPROCS=8 EP CLASS=C***, I get an error like
=========================================
= NAS Parallel Benchmarks 3.3 =
= MPI/F77/C =
=========================================
cd EP; make NPROCS=8 CLASS=C
make[1]: Entering directory
`/home/vaibhavs/NPB3.3/NPB3.3-MPI/EP'
make[2]: Entering directory
`/home/vaibhavs/NPB3.3/NPB3.3-MPI/sys'
cc -g -o setparams setparams.c
make[2]: Leaving directory
`/home/vaibhavs/NPB3.3/NPB3.3-MPI/sys'
../sys/setparams ep 8 C
make.def modified. Rebuilding npbparams.h just in
case
rm -f npbparams.h
../sys/setparams ep 8 C
gfortran -O -o ../bin/ep.C.8 ep.o
../common/print_results.o ../common/randi8.o
../common/timers.o -L/share/app
s/intel/impi/5.0.2.044/intel64/lib
-lmpi
ep.o: In function `MAIN__':
ep.f:(.text+0x31): undefined reference to
`mpi_init_'
ep.f:(.text+0x4b): undefined reference to
`mpi_comm_rank_'
ep.f:(.text+0x65): undefined reference to
`mpi_comm_size_'
ep.f:(.text+0x347): undefined reference to
`mpi_abort_'
ep.f:(.text+0x3df): undefined reference to
`mpi_barrier_'
ep.f:(.text+0x803): undefined reference to
`mpi_allreduce_'
ep.f:(.text+0x842): undefined reference to
`mpi_allreduce_'
ep.f:(.text+0x879): undefined reference to
`mpi_allreduce_'
ep.f:(.text+0x935): undefined reference to
`mpi_allreduce_'
ep.f:(.text+0xc70): undefined reference to
`mpi_finalize_'
../common/timers.o: In function `timer_stop_':
timers.f:(.text+0x27): undefined reference to
`mpi_wtime_'
../common/timers.o: In function `timer_start_':
timers.f:(.text+0x57): undefined reference to
`mpi_wtime_'
collect2: ld returned 1 exit status
make[1]: *** [../bin/ep.C.8] Error 1
make[1]: Leaving directory
`/home/vaibhavs/NPB3.3/NPB3.3-MPI/EP'
make: *** [ep] Error 2
Can anybody please help me in resolving this issue?
Thanks