Software Archive
Read-only legacy content
17061 토론

Compiler version and offloading errors

JJK
새로운 기여자 III
531 조회수

while playing with the offloading examples found on this forum I ran into a little snag:

host A: Scientific Linux 6.5, Intel compiler v14, Xeon Phi 7100, mpss 3.3.2 stack

host B: CentOS 6.5, Intel compiler v15, 2 x Xeon Phi 5100, mpss 3.3.2 stack

When I compile an offload example on host A, then copy it over to host B and I try to run it I get:

[hostB] $ ./offload1.icc14 
offload error: target executable is not available

It does not work even if I copy over the offload libraries from icc v14 to the new environment:

[hostB] $  LD_LIBRARY_PATH=icc14 ldd ./offload1.icc14 
        linux-vdso.so.1 =>  (0x00007fff3a8f7000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f8486329000)
        liboffload.so.5 => icc14/liboffload.so.5 (0x00007f84860f7000)
        libcilkrts.so.5 => icc14/libcilkrts.so.5 (0x00007f8485eb9000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f8485bb3000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f848599c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f848577f000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f84853eb000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f84851e6000)
        libimf.so => icc14/libimf.so (0x00007f8484d1f000)
        libsvml.so => icc14/libsvml.so (0x00007f8484128000)
        libirng.so => icc14/libirng.so (0x00007f8483f20000)
        libiomp5.so => icc14/libiomp5.so (0x00007f8483c05000)
        libintlc.so.5 => icc14/libintlc.so.5 (0x00007f84839af000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f84865bf000)

[hostB] $ LD_LIBRARY_PATH=icc14 ./offload1.icc14 
offload error: cannot find MIC executable offload_main
offload error: cannot start process on the device 0 (error code 6)

I have seen error code 14 also).

If I recompile the code everything runs fine under icc 15 as well, but how can I detect this situation? Ideally I would like to compile my code on one host and then distribute it to other nodes with Xeon Phi's. I do not know in advance which version of the icc software is installed on these nodes, so how can I ensure that my compiled program will be future proof?

 

 

0 포인트
4 응답
Kevin_D_Intel
직원
531 조회수

I can reproduce this. There is a significant change between 14.0 and 15.0 related to the offload binary image. In 14.0 this was a shared object (DSO) and in 15.0 it is now an executable and that appears to be what's in play.

When moving the 14.0 environment over, maybe you missed also grabbing the offload_main file. That comes from a path like: <install-dir>/composer_xe_2013_sp1.4.211/compiler/lib/mic/

And you must ensure that MIC_LD_LIBRARY_PATH refers to the location of offload_main when the program executes.

0 포인트
Kevin_D_Intel
직원
531 조회수

For future proofing, a good suggestion from someone was an alternative to creating your own 14.0 run-time bundle is to use the Composer XE 2013 SP1 Redistributable Library package available here.

0 포인트
JJK
새로운 기여자 III
531 조회수

OK, copying over the entire $MIC_LD_LIBRARY_PATH directory from the ICC 14 installation did the trick (I was too lazy to figure out if it was just the offload_main file). (icc14 = /opt/intel/composer_xe_2013_sp1.1.106 in my case).

Vice versa for the icc15 (=/opt/intel/composer_xe_2015.0.090) files.

 

Thanks Kevin!

0 포인트
Kevin_D_Intel
직원
531 조회수

You're welcome. Glad that worked out.

In case someone else finds interest in this same scenario, there is also a Redistributable Library package for the Intel Parallel Studio XE 2015 available here.

0 포인트
응답