extern "C" void __intel_cilk_for_32_offload( int size, void (*copy_constructor)(void*, void*), int target_number, void *raddr, void *closure_object, unsigned int iters, unsigned int grain_size) { OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__); target_number = __offload_myoIsAvailable(target_number); if (target_number >= 0) { struct S { void *M1; unsigned int M2; unsigned int M3; char closure[]; } *args; args = (struct S*) _Offload_shared_malloc(sizeof(struct S) + size); if (args == NULL) LIBOFFLOAD_ERROR(c_malloc); args->M1 = raddr; args->M2 = iters; args->M3 = grain_size; if (copy_constructor == 0) { memcpy(args->closure, closure_object, size); } else { copy_constructor(args->closure, closure_object); } myo_wrapper.Release(); myo_wrapper.GetResult( myo_wrapper.RemoteCall("__intel_cilk_for_32_offload", args, target_number) ); myo_wrapper.Acquire(); _Offload_shared_free(args); ORSL::release(target_number); } else { __cilkrts_cilk_for_32(raddr, closure_object, iters, grain_size); } }
extern "C" void __intel_cilk_for_32_offload_wrapper(void *args_) { OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__); struct S { void *M1; unsigned int M2; unsigned int M3; char closure[]; } *args = (struct S*) args_; __cilkrts_cilk_for_32(args->M1, args->closure, args->M2, args->M3); }