/* * @@name: declare_variant.1c * @@type: C * @@compilable: yes, omp_5.0 * @@linkable: yes * @@expect: success */ #define N 100 #include #include void p_vxv(int *v1,int *v2,int *v3,int n); void t_vxv(int *v1,int *v2,int *v3,int n); #pragma omp declare variant( p_vxv ) match( construct={parallel} ) #pragma omp declare variant( t_vxv ) match( construct={target} ) void vxv(int *v1,int *v2,int *v3,int n) // base function { for (int i= 0; i< n; i++) v3[i] = v1[i] * v2[i]; } void p_vxv(int *v1,int *v2,int *v3,int n) // function variant { #pragma omp for for (int i= 0; i< n; i++) v3[i] = v1[i] * v2[i]*3; } #pragma omp declare target void t_vxv(int *v1,int *v2,int *v3,int n) // function variant { #pragma omp distribute simd for (int i= 0; i< n; i++) v3[i] = v1[i] * v2[i]*2; } int main() { int v1[N], v2[N], v3[N]; for(int i=0; i