Writing Target-Specific Code with _Cilk_offload

This topic only applies to Intel® Many Integrated Core Architecture (Intel® MIC Architecture).

You can write offloaded sections of code to take advantage of target-specific intrinsic functions. When the compiler generates code for the coprocessor, it defines the macro __MIC__. You can write target-specific code within an #ifdef __MIC__ section.

Example

This example shows how target-specific code may be written within an #ifdef __MIC__ section.

The implementation of the class F32vec is specialized for the CPU and the coprocessor. The offloaded code can use the specialized version if it runs on the coprocessor. If function_1 is executed on the CPU, it uses the CPU version of the class F32vec. If it runs on the coprocessor, it uses the definition from micvec.h.

// The class F32vec will be used in offloaded code
// It needs the target(mic) attribute

#pragma offload_attribute(push,_Cilk_shared)


// Use customized versions for CPU and coprocessor

#ifdef __MIC__

        // The Intel® MIC Architecture version of the class is in micvec.h
        #include <micvec.h>

#else
        // The CPU version is written inline
        class F32vec16
        {
                public:
                ...
                friend F32vec16 sqrt(const F32vec16& a);
        };
#endif

#pragma offload_attribute(pop)


_Cilk_shared void function_3()
{
        F32vec16 w = ...;
        F32vec16 s;
        s = sqrt(w);
        ...
}

See Also

For more complete information about compiler optimizations, see our Optimization Notice.