brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · fe875b7 Raw
55 lines · c
1// This test checks that "update from" clause in OpenMP is supported when the2// elements are updated in a non-contiguous manner. This test checks that3// #pragma omp target update from(data[0:4:2]) correctly updates only every4// other element (stride 2) from the device to the host5 6// RUN: %libomptarget-compile-run-and-check-generic7#include <omp.h>8#include <stdio.h>9 10int main() {11  int len = 8;12  double data[len];13#pragma omp target map(tofrom : len, data[0 : len])14  {15    for (int i = 0; i < len; i++) {16      data[i] = i;17    }18  }19  // Initial values20  printf("original host array values:\n");21  for (int i = 0; i < len; i++)22    printf("%f\n", data[i]);23  printf("\n");24 25#pragma omp target data map(to : len, data[0 : len])26  {27// Modify arrays on device28#pragma omp target29    for (int i = 0; i < len; i++) {30      data[i] += i;31    }32 33#pragma omp target update from(data[0 : 4 : 2])34  }35  // CHECK: 0.00000036  // CHECK: 1.00000037  // CHECK: 4.00000038  // CHECK: 3.00000039  // CHECK: 8.00000040  // CHECK: 5.00000041  // CHECK: 12.00000042  // CHECK: 7.00000043  // CHECK-NOT: 2.00000044  // CHECK-NOT: 6.00000045  // CHECK-NOT: 10.00000046  // CHECK-NOT: 14.00000047 48  printf("from target array results:\n");49  for (int i = 0; i < len; i++)50    printf("%f\n", data[i]);51  printf("\n");52 53  return 0;54}55