Intel® Moderncode for Parallel Architectures
Support for developing parallel programming applications on Intel® Architecture.
1698 Discussions

problem linking openmp code with mkl and -tcheck / Intel Thread Checker

Luis_Alberto
Beginner
1,086 Views

Hello,

I am trying to paralellize an existing Fortran code using OpenMP. In order to debug it, I want to use Intel Thread Checker 3.1 for Linux.

I compile every source file using 'ifort -openmp -g -O0 -tcheck -o object.o source.f'

I link using:

ifort -openmp -g -O0 -tcheck -o pilot_simpl st-comun_s.o pilot_simpl.o etaxjadp.o tlibredp.o resol_dp.o locin1te.o cpccano.o cierredp.o cierredp.o extelldp.o fundlo.o fundex.o input_s.o output_s.o simetria_p.o sfbiesf.o sfpotbi.o esfuerzos.o rutinas_assemble.o QKJ.o intufi.o fundex_partes.o obtenerpi.o reaccionencabeza.o intuxi_bottom.o obtenerqeqv.o condicionamiento.o matricesMP.o instrato_s.o piers.o vector_datos.o rigidez.o obtener_colocacion.o ComputeTransformationMatrix.o RotateMatrix.o -L /opt/intel/Compiler/11.0/083/mkl/lib/em64t -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -Wl,--end-group -openmp -tcheck -lpthread

The libraries are the ones that work for me when I do not use -tcheck, but when I use '-tcheck' I start to get undefined references such as the ones listed below.

Can someone please help me with this?

Notes: I link to mkl libraries such as: zgetrf_, dgemv_ and dgemm_'

My version of ifort and mkl are 11.0.083.

I have Intel Thread Checker 3.1 installed and running, and environment variables set.

/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_ok_to_fork'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_ordered'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_for_static_init_8'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_barrier'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_next_4'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_critical'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_fini_8'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_serialized_parallel'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_end_critical'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_init_8'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_fini_4'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_push_num_threads'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_for_static_init_4'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_end_serialized_parallel'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_flush'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_next_8'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_dispatch_init_4'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_global_thread_num'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_end_ordered'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_fork_call'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_atomic_fixed8_add'
/opt/intel/Compiler/11.0/083/mkl/lib/em64t/libmkl_intel_thread.so: undefined reference to `__kmpc_for_static_fini'

0 Kudos
4 Replies
TimP
Honored Contributor III
1,086 Views

I'm not certain what you want to do with your MKL linking; you are mixing the procedures for static or shared MKL libraries. But, maybe it could work in the absence of -tcheck. In my experience, MKL libraries don't work with -tcheck, so I substitute public BLAS source code (not threaded within BLAS).

For expert opinions on use of MKL with -tcheck, the MKL forum might be more useful. I suspect the writers of thread checker didn't intend to support the combination of MKL and -tcheck, instead recommending you stick to cases small enough to use dynamic thread check instrumentation.

0 Kudos
Luis_Alberto
Beginner
1,086 Views

Yes, it works without -tcheck. Does it mean that ITT doesn't work with programs that need MKL Libraries?

Could you please explain further what do you mean by 'mixing the procedures for static or shared MKL libraries.'?

Thanks

0 Kudos
TimP
Honored Contributor III
1,086 Views
Normally, you would use the --start-group .... -end-group linker directives only with static libraries. I guess it does no harm to use them with the shared libraries.
0 Kudos
Luis_Alberto
Beginner
1,086 Views

I hope it does not harm. I wrote them because it says so in the mkl-link-line advisor site from intel itself!:

http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/

Thank you very much for your response. I posted my question again in the MKL forum as you advised.

0 Kudos
Reply