After reading the first tutorials of using the Xeon Phi and some experiments with it in reality, it seems that I missunderstood its use. Also some of the tutorials (not from Intel itself) seem to be wrong at this point.
The –mmic compiler-flag is only needed if an application shall run in native mode on the Xeon Phi. The generated executable can’t be started on the host system, but only on the Phi. To run an application completely on the Phi:
- Compile the app with icc -mmic -OTHER_NEEDED_FLAGS
- Copy the binary to Phi via scp EXENAME mic0:/tmp/
- Login on the Phi with ssh mic0
- Go to directory with cd /tmp
- Start application ./EXENAME
For offload versions of your application you must not use the -mmic flag! The compiler will complain about unknown pragmas and stop compiling. Only icc without -mmic recongnizes #pragma offload and generates usable hybrid code.
The usage of the –offload flag changed since the early versions of the mic-capable compilers. The –offload is obsolete. So now it is the standard behaviour that the compiler generates both, mic and host cpu code for the offloaded regions. If you want to surpress the generation of mic code you have to use -no-offload flag. It helped me a lot to become aware of this fact.