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

Cluster FFT - undefined reference

sanjap
Beginner
869 Views
Hi, this is driving me crazy:
Assembled the simplest application just to test FFT on cluster (Linux SUSE 10.0). Could not compile it, always undefined reference just to specific Cluster FFT functions. Regular (non-cluster) FFT works just fine, but I wanted to try running it in parallel on our new cluster,a nd besides this is just a testbed for redesigning some larger project with mkl. Please help.

(Intel compiler 10.1.08, mkl: tried both 10.0.08 and 10.1.1.019, the same behaviour)
Bellow: Source code, command line, compiler/linker error.

--SOURCE------------------------------
include "mkl_cdft.f90"

program ff

Use MKL_CDFT
include "mpif.h"

Complex :: X(64)
type(DFTI_DESCRIPTOR_DM), POINTER :: My_Desc1_Handle
Integer :: Status, j
real :: rx
integer IERROR

call MPI_INIT(IERROR)

!Some simple input array
do j=1,64
rx = -10. +(j-1)*20./63.
x(j) = cmplx(exp(-(rx**2)/2.),0.)
end do

! Perform a complex to complex transform
Status = DftiCreateDescriptorDM(MPI_COMM_WORLD, My_Desc1_Handle, DFTI_SINGLE, DFTI_COMPLEX, 1, 64)
Status = DftiCommitDescriptorDM( My_Desc1_Handle )
Status = DftiComputeForwardDM( My_Desc1_Handle, X )
Status = DftiFreeDescriptorDM(My_Desc1_Handle)

call MPI_FINALIZE(IERROR)

end program ff

--COMPILER COMM. LINE--------------

ifort -O -mcmodel=large -i8 -lmkl_cdft_core -lmpi cfft.f90 -o cfft.exe

--COMPILER ERROR--------------------
/tmp/ifortVZq4Fs.o: In function `MAIN__':
cfft.f90:(.text+0x136): undefined reference to `DftiCreateDescriptorDM1_fortran'
cfft.f90:(.text+0x152): undefined reference to `DftiCommitDescriptorDM_fortran'
cfft.f90:(.text+0x177): undefined reference to `DftiComputeForwardDMi_fortran'
cfft.f90:(.text+0x18f): undefined reference to `DftiFreeDescriptorDM_fortran'
/tmp/ifortVZq4Fs.o: In function `mkl_cdft_mp_dfticreatedescriptordmn_d_':
cfft.f90:(.text+0x1cd): undefined reference to `DftiCreateDescriptorDMn_fortran'
/tmp/ifortVZq4Fs.o: In function `mkl_cdft_mp_dfticreatedescriptordmn_s_':
cfft.f90:(.text+0x1ed): undefined reference to `DftiCreateDescriptorDMn_fortran'
/tmp/ifortVZq4Fs.o: In function `mkl_cdft_mp_dfticreatedescriptordm1_d_':
cfft.f90:(.text+0x210): undefined reference to `DftiCreateDescriptorDM1_fortran'
/tmp/ifortVZq4Fs.o: In function `mkl_cdft_mp_dfticreatedescriptordm1_s_':
cfft.f90:(.text+0x234): undefined reference to `DftiCreateDescriptorDM1_fortran'
-------------------------------------
0 Kudos
3 Replies
Dmitry_B_Intel
Employee
869 Views
Hi sanjap,

Please refer to MKL User's Guide for correct linking lines, specifically the section "Working with Intel Math Kernel Library Cluster Software." Perhaps, the following line will do what you need:


ifort-O -mcmodel=large -i8 cfft.f90 -o cfft.exe -lmkl_cdft_core -lmkl_blacs_intelmpi_ilp64 -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lmpi

Dima


0 Kudos
sanjap
Beginner
869 Views
Hi,
I have already tried all the libraries mentioned in User's Guide - Working with cluster ..., butno progress.Also, when listing library contents with nm,specific cluster fft functions (for example DftiCreateDescriptorDM) are shown in libmkl_cdft_core.a, but I could not link it in, even if forcing static linking.
Perhaps I'm overseeing something wrong in program...?
Thanks anyway
0 Kudos
Vladimir_Petrov__Int
New Contributor III
869 Views
Hi,

Thank you for your interest in our Cluster FFT library. The symbols like DftiCreateDescriptorDM1_fortran represent the FORTRAN interface for CFFT and have to be resolved from one of the interface libraries libmkl_intel_lp64.a or libmkl_intel_ilp64.a depending on your needs. In general (according to the User's Guide) the link line should look like:

ifort myprog.f -L$MKLPATH -I$MKLINCLUDE -Wl,--start-group $MKLPATH/libmkl_intel_lp64.a $MKLPATH/libmkl_intel_thread.a $MKLPATH/libmkl_core.a $MKLPATH/libmkl_cdft_core.a -Wl,--end-group -liomp5 -lpthread

But the best starting point to learn how to work with MKL is the examples directory (examples/cdftf in this case). In particular using compiler wrappers provided by MPI could save some time figuring out which MPI libraries to link with.

Hope this helps,
-Vladimir
0 Kudos
Reply