/********************************************************************** * C-DAC Tech Workshop : hyPACK-2013 October 15-18,2013 *Example 1 : vect_vect_add_offload.cpp *Objective : Write An Cilk Plus Program For vector vector addition *Input : 1)Vector size 2)Number of threads *Output : 1)Time taken in seconds 2)Gflops/sec *Created : August-2013 *E-Mail : hypack2013@cdac.in *************************************************************************/ #include #include #include #include #include #include #include #include #pragma offload_attribute(push,target(mic)) #pragma offload_attribute(pop) using namespace std; __attribute__((target(mic))) int vector_size; double *fill_vector( int vector_size); __declspec(target(mic)) void vector_add(double *A,double *B,double *C,int vector_size); double walltime() { double tsec=0.0; struct timeval mytime; gettimeofday(&mytime,0); tsec=(double)(mytime.tv_sec+mytime.tv_usec*1.0e-6); return tsec; } //allocates memory for an array of doubles , double *fill_vector( int vector_size) { double *a; if(vector_size <= 0) { cout<< "illegal range of vector_size" << vector_size << endl; return 0; } a=(double *)malloc(vector_size*sizeof(double)); //a=(double *)malloc(vector_size*sizeof(double)); if(!a) { cout<< "memory allocation failed\n" << endl; return 0; } return a; } __declspec(target(mic)) void vector_add(double *A,double *B,double *C,int vector_size) { _Cilk_for(int i=0;i