- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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?
링크가 복사됨
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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!
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
