Software Archive
Read-only legacy content

Compile KNC coprocessor code with KNL host processor

Wo_C_
Beginner
873 Views

Dear All,

Sorry advance if such similar post is an old topic!

I am trying to compile some existing KNC coprocessor code with KNL host processor using Parallel Studio 2017 but encountered the errors below.

I tried commenting out the "#pragma" code from the source to avoid calling the coprocessor but no helps.

Any good documentation for how to convert KNC coprocessor to KNL host processor?

Better yet, any idea how to fix the below problem?

Thanks much in advance for any pointers!

--Wo

...

mpiicpc -xMIC-AVX512 -O3 -Wall -funroll-all-loops -I /big/Intel/bin/include  -I ../../zlib-1.2.8 -DCOMPRESSED_INPUT  -DMPI_PARALLEL -o objs/AlignCoreTiling.mpi.cpp.o -c src/AlignCoreTiling.cpp

mpiicpc -xMIC-AVX512 -O3 -Wall -funroll-all-loops -I /big/Intel/bin/include  -I ../../zlib-1.2.8 -DCOMPRESSED_INPUT  -o mpi-swaphi-ls  objs/AlignCore.mpi.cpp.o  objs/Align.mpi.cpp.o  objs/main.mpi.cpp.o  objs/SeqFileParser.mpi.cpp.o  objs/Sequence.mpi.cpp.o  objs/Utils.mpi.cpp.o  objs/AlignCoreNaive.mpi.cpp.o  objs/AlignCoreTiling.mpi.cpp.o -lz -lm

ld: warning: libcoi_device.so.0, needed by /big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5, not found (try using -rpath or -rpath-link)
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIPerfGetCycleFrequency@COI_1.0'
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIBufferAddRef@COI_1.0'
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIPipelineStartExecutingRunFunctions@COI_1.0'
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIEngineGetIndex@COI_1.0'
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIBufferReleaseRef@COI_1.0'
/big/Intel/bin/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin/libioffload_target.so.5: undefined reference to `COIProcessWaitForShutdown@COI_1.0'
make: *** [all] Error 1

 

0 Kudos
10 Replies
Jan_Z_Intel
Employee
873 Views

Hello,

You may have missed one of the following constructs:

__attribute__ (( target (mic))) int i;

or:

#pragma offload_attribute(push, target(mic))
...
#pragma offload_attribute(pop)

Another thing to check is having offload.h included in one of the source files. 

Let me also propose considering more gradual approach to modernizing your application, presented during HPC Developer Conference: http://www.intel.com/content/www/us/en/events/hpcdevcon/systems-track.html#discover 

 

0 Kudos
Ravi_N_Intel
Employee
873 Views

Do you have the KNL MPSS installed on your system.

0 Kudos
Wo_C_
Beginner
873 Views

Dear All,

Thanks for those replied!

I think using "-qoffload=none" solved all my compilation problem.

But, when executing the program, I have “failed to offload on device 0” runtime error message. I think my program stopped at this point.

Any ideas how to fix this?

Thanks.

--Wo

0 Kudos
Rajiv_D_Intel
Employee
873 Views

If you have a KNC offload program and want to recompile for KNL, the switch is -qoffload-arch=mic-avx512.

Any KNC-specific code within #ifdef __MIC__ will need to be examined for suitability for KNL, and the __MIC__ macro itself should be replaced with __TARGET_ARCH_MIC.

0 Kudos
Jan_Z_Intel
Employee
873 Views

This message: “failed to offload on device 0" indicates that the program still tries to offload.

I would like to make sure that I understand your goal: do you want to modify the program that currently uses offloading to KNC so that it will run on a KNL machine without any offloading? Is it correct?

Another question: does your original KNC program use compiler offloading "#pragma offload target(mic)" or OpenMP target directives?

0 Kudos
Wo_C_
Beginner
873 Views

Dear Jan,

Yes I want to modify the program that currently uses offloading to KNC so that it will run on a KNL machine without any offloading. Yes, the current KNC code does use #pragma constructs and openmp.

Thank smuch for your help!

--Wo

0 Kudos
Jan_Z_Intel
Employee
873 Views

I understand, thanks for the confirmation.

I get the same error message while linking any simple program with one of the offload pragma constructs (either #pragma offload or #pragma offload_attribute) and -xMIC-AVX512 parameter. Please double check if you haven't missed any of those while commenting out pragmas. If it doesn't help, is it possible for you to share the source code?

0 Kudos
Wo_C_
Beginner
873 Views

Jan,

Good that you could repeat the problem! Yes, I do have the 

What I also the -xMIC-AVX512 -O3 -qopenmp -Wall -qoffload=none -qoffload-arch=mic-avx512 and also comment out the "#pragma offload" in the program but same error message.

I just sent you the source code via Google Doc since the attachment won't go through.

Thanks much for your help!

--Wo

0 Kudos
Jan_Z_Intel
Employee
873 Views

Wo,

I've sent you a private message here on IDZ regarding code sharing. 

Jan

0 Kudos
Parameswaran__Athi_N
873 Views

Jan,

         I am facing with the same problem in the same code he is using. I have tried converting the offload code completely to run in Host KNL processor without any co-processor(Native mode). I have removed the offload constructs and __MIC__ routines. I am still facing issues elsewhere.

         The code is using Intel Intrinsic vector registers to implement vectorization in the algorithm. When I remove __MIC__ and offload constructs and compile the code, I am getting error messages provided in the link below.

https://software.intel.com/en-us/forums/intel-many-integrated-core/topic/748504

 

0 Kudos
Reply