#define ALLOC alloc_if(1) free_if(0) #define FREE alloc_if(0) free_if(1) #define REUSE alloc_if(0) free_if(0) #include #include "axpby.h" int main(int argc, char * argv[] ) { double *x, *y, *z1, *z2; double a, b; int i, n; n = 8; a = 2, b = 1; x = (double*) calloc (n, sizeof(double)); y = (double*) calloc (n, sizeof(double)); z1 = (double*) calloc (n, sizeof(double)); z2 = (double*) calloc (n, sizeof(double)); for(i = 0; i < n; i++) { x[i] = (double) i; y[i] = (double) i+1; } for(i = 0; i < n; i++) printf("x[%d]=%f\n", i, x[i]); printf("\n"); for(i = 0; i < n; i++) printf("y[%d]=%f\n", i, y[i]); printf("\n"); #pragma offload target(mic) inout(x,y,z1 : length(n)) { axpby1(z1, a, x, b, y, n); } #pragma offload target(mic) in(x, y, z2: length(n) ALLOC) {} axpby2(z2, a, x, b, y, n); #pragma offload target(mic) out(z2 : length(n) FREE) \ nocopy(x,y : length(n) FREE) {} for(i = 0; i < n; i++) printf("z1[%d] = %f\n", i, z1[i]); printf("\n"); for(i = 0; i < n; i++) printf("z2[%d] = %f\n", i, z2[i]); free(x); free(y); free(z1); free(z2); }