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

Compiling CDFTF example

svyatoslav_korneev
初学者
3,121 次查看
Hellow, Intel experts.

Thank you for the nice MKL library. I have one question.

I try to compile CDFTF example on ia32 PC, everything work fine. Then I compile this example on 64 cluster, work OK too. But when I remove
"SUBROUTINE Dfti_Example_Status_Print" from example files, I have such errors on 64 cluster:

/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_blacs_intelmpi_ilp64.a(blacs_extended.o): In function `MKL_Waitall':
_blacs_extended.c:(.text+0x1da): undefined reference to `mkl_serv_mkl_print'
/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_blacs_intelmpi_ilp64.a(blacs_extended.o): In function `MKL_Waitany':
_blacs_extended.c:(.text+0x2a9): undefined reference to `mkl_serv_mkl_print'

When I compile example without "SUBROUTINE Dfti_Example_Status_Print" on my ia32 PC, everything is OK.

What is the problem. Why I can't compile example without this subroutine on 64 cluster?

Thank you,
Svyatoslav
0 项奖励
1 解答
Vladimir_Petrov__Int
新分销商 III
3,121 次查看

Hello Svyatoslav,

In order to make your modified example work please try placing the core library after the BLACS library on the link line (near the end of the makefile) like this:

... $(MKL_LIBS) $(MKL_PATH)/libmkl_blacs$(Bs)$(BLACS_PART).$(EXT) $(CORE_LIB) -lpthread ...

Best regards,
Vladimir

在原帖中查看解决方案

0 项奖励
9 回复数
Shane_S_Intel
员工
3,121 次查看
Problem compiling under ia64

Can you elaborate more on theproblems you're having? -Shane
0 项奖励
svyatoslav_korneev
初学者
3,122 次查看

Can you elaborate more on theproblems you're having? -Shane


I try to compile CDFTF example under 64 cluster. (/opt/intel/Compiler/11.0/083/mkl/examples/cdftf)

When I remove "SUBROUTINE Dfti_Example_Status_Print" from examples files, I have such errors:

/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_blacs_intelmpi_ilp64.a(blacs_extended.o): In function `MKL_Waitall':
_blacs_extended.c:(.text+0x1da): undefined reference to `mkl_serv_mkl_print'
/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_blacs_intelmpi_ilp64.a(blacs_extended.o): In function `MKL_Waitany':
_blacs_extended.c:(.text+0x2a9): undefined reference to `mkl_serv_mkl_print'

This errors occur under 64 system, but not under 32.

Can you explain me, this errors and why this subroutine play such role in compiling under 64

P.S.

I suppose that this subroutine contains USE MKL_DFTI

Svyatoslav
0 项奖励
Vladimir_Petrov__Int
新分销商 III
3,122 次查看

Hello Svyatoslav,

In order to make your modified example work please try placing the core library after the BLACS library on the link line (near the end of the makefile) like this:

... $(MKL_LIBS) $(MKL_PATH)/libmkl_blacs$(Bs)$(BLACS_PART).$(EXT) $(CORE_LIB) -lpthread ...

Best regards,
Vladimir
0 项奖励
svyatoslav_korneev
初学者
3,121 次查看

Hello Svyatoslav,

In order to make your modified example work please try placing the core library after the BLACS library on the link line (near the end of the makefile) like this:

... $(MKL_LIBS) $(MKL_PATH)/libmkl_blacs$(Bs)$(BLACS_PART).$(EXT) $(CORE_LIB) -lpthread ...

Best regards,
Vladimir

Thank you for the answer.

But core library is included in:

MKL_LIBS= -Wl,--start-group $(MKL_PATH)/libmkl_cdft_core.a $(IFACE_LIB) $(THREADING_LIB) $(CORE_LIB) -Wl,--end-group $(OMP_LIB)

So I try to place MKL_LIBS after BLACS like this:

$(_CS) $(SPEC_OPT) $(RES_DIR)/$*.o $(RES_DIR)/cdft_example_support.o $(RES_DIR)/mkl_cdft.o -L $(MKL_PATH) $(MKL_PATH)/libmkl_blacs$(Bs)$(BLACS_PART).$(EXT) $(MKL_LIBS) -lpthread -lm -o $(RES_DIR)/$*.exe

And after start make file:

make libem64t interface=ilp64 mpi=mpich

I have a lot of errors:

/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_cdft_core.a(CreateDesc.o): In function `DftiCreateDescriptorDM':
head_CreateDesc.c:(.text+0xdb): undefined reference to `MKL_Comm_size'
head_CreateDesc.c:(.text+0xed): undefined reference to `MKL_SUCCESS'
head_CreateDesc.c:(.text+0x15e): undefined reference to `MKL_Comm_rank'
head_CreateDesc.c:(.text+0x170): undefined reference to `MKL_SUCCESS'
/opt/intel/mkl/10.1.0.015/lib/em64t/libmkl_cdft_core.a(computend.o): In function `mkl_cdft_CDFT_Compute_nd':
head_computend.c:(.text+0x248): undefined reference to `MKL_DOUBLE'
head_computend.c:(.text+0x26a): undefined reference to `MKL_Alltoallv'
head_computend.c:(.text+0x274): undefined reference to `MKL_SUCCESS'
head_computend.c:(.text+0x346): undefined reference to `MKL_DOUBLE'
head_computend.c:(.text+0x368): undefined reference to `MKL_Alltoallv'
head_computend.c:(.text+0x372): undefined reference to `MKL_SUCCESS'

........................................................................

Regards,
Svyatoslav


0 项奖励
Vladimir_Petrov__Int
新分销商 III
3,121 次查看

Svyatoslav,

There are circular references between the libraries. To resolve all of them successfully the libraries have to be either repeated or placed inside the --start-group ... --end-group.

Have you tried my previous suggestion?

Best regards,
Vladimir
0 项奖励
svyatoslav_korneev
初学者
3,121 次查看

Svyatoslav,

There are circular references between the libraries. To resolve all of them successfully the libraries have to be either repeated or placed inside the --start-group ... --end-group.

Have you tried my previous suggestion?

Best regards,
Vladimir

Thanks, It work.
Can you explain me plz, what was the reason of the error.

Why in the initial make file core library was'n inside --start-group ... --end-group

What about $(MKL_PATH)/libmkl_cdft_core.a $(IFACE_LIB) $(THREADING_LIB), shoud I place it inside group block?

Regards,
Svyatoslav
0 项奖励
Vladimir_Petrov__Int
新分销商 III
3,121 次查看

Thanks, It work.
Can you explain me plz, what was the reason of the error.

Why in the initial make file core library was'n inside --start-group ... --end-group

What about $(MKL_PATH)/libmkl_cdft_core.a $(IFACE_LIB) $(THREADING_LIB), shoud I place it inside group block?

Regards,
Svyatoslav

Svyatoslav,

The core library (libmkl_core.a) is inside the group block. It's probably a good idea to place the BLACS and cdft_core libraries inside the group block as well.

In general you can easily find answers to questions on how to link with MKL with the help of our Link Line Advisor:
http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/

Best regards,
Vladimir
0 项奖励
svyatoslav_korneev
初学者
3,121 次查看

Svyatoslav,

The core library (libmkl_core.a) is inside the group block. It's probably a good idea to place the BLACS and cdft_core libraries inside the group block as well.

In general you can easily find answers to questions on how to link with MKL with the help of our Link Line Advisor:
http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/

Best regards,
Vladimir

Thank you for the all answers. Can you plz refer me to article, where I can read about difference between group block lib and outgroup.
0 项奖励
svyatoslav_korneev
初学者
3,121 次查看

Thanks, It work.
Can you explain me plz, what was the reason of the error.

Why in the initial make file core library was'n inside --start-group ... --end-group

What about $(MKL_PATH)/libmkl_cdft_core.a $(IFACE_LIB) $(THREADING_LIB), shoud I place it inside group block?

Regards,
Svyatoslav

In this post I was wrong. I mixed up inside with outside :)

Right questions:

Why in the initial make file core library was'n OUTside --start-group ... --end-group

What about $(MKL_PATH)/libmkl_cdft_core.a $(IFACE_LIB) $(THREADING_LIB), shoud I place it OUTside group block?

Thank you

Regards,
Svyatoslav
0 项奖励
回复