Пример #1
0
void
shrd_ofld11(void) {

   // Malloc shared memory using compiler intrinsic
   #ifdef __INTEL_OFFLOAD
   ptr = (_Cilk_shared int *) _Offload_shared_malloc(4);
   #else
   ptr = (int *) malloc(4);
   #endif

  // Initialize shared memory
  _Cilk_offload init11();

  // Check results
  if (*ptr == 9)
  printf("PASS shrd_ofld11\n");
  else
  printf("*** FAIL shrd_ofld11\n");
  
  // Free shared memory
  #ifdef __INTEL_OFFLOAD
  _Offload_shared_free(ptr);
  #else
  free(ptr);
  #endif
}
Пример #2
0
extern "C" void __intel_cilk_for_64_offload(
    int size,
    void (*copy_constructor)(void*, void*),
    int target_number,
    void *raddr,
    void *closure_object,
    uint64_t iters,
    uint64_t grain_size)
{
    OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__);

    target_number = __offload_myoIsAvailable(target_number);
    if (target_number >= 0) {
        struct S {
            void *M1;
            uint64_t M2;
            uint64_t 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_64_offload", args,
                                   target_number)
        );
        myo_wrapper.Acquire();

        _Offload_shared_free(args);

        ORSL::release(target_number);
    }
    else {
        __cilkrts_cilk_for_64(raddr,
                              closure_object,
                              iters,
                              grain_size);
    }
}
Пример #3
0
// 在mic上执行下面函数会报错
// CARD--ERROR:1 thread:3 myoArenaFree: It is not supported to free shared memory from the MIC side!
_Cilk_shared void cilk_sharedfree() {
	int i;
	share_pointer = (int *)_Offload_shared_malloc(sizeof(int) * n);
	for(i = 0; i < n; i++) {
		share_pointer[i] = i;
	}

	for(i = 0; i < n; i++) {
		printf("cilk_sharedfree: share_pointer[%d] is %d\n", i, share_pointer[i]);
	}
	_Offload_shared_free(share_pointer);

}
Пример #4
0
int main() {

	//_Cilk_offload cilk_malloc();

	//_Cilk_offload cilk_sharedfree();

	// 下面三条语句执行时会错误
	//share_pointer =(int *) malloc(sizeof(int) * n);
	//_Cilk_offload cilk_pointer();
	//free(share_pointer);

	// 下面三条语句可以正常执行
	share_pointer = (int *) _Offload_shared_malloc(sizeof(int) * n);
	_Cilk_offload cilk_pointer();
	_Offload_shared_free(share_pointer);

	return 0;
}