brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 15d477f Raw
64 lines · c
1// This test checks that #pragma omp target update from(data[0:4:3]) correctly2// updates every third element (stride 3) from the device to the host, partially3// across the array4 5// RUN: %libomptarget-compile-run-and-check-generic6#include <omp.h>7#include <stdio.h>8 9int main() {10  int len = 11;11  double data[len];12 13#pragma omp target map(tofrom : 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 : 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#pragma omp target update from(data[0 : 4 : 3]) // indices 0,3,6,933  }34 35  printf("device array values after update from:\n");36  for (int i = 0; i < len; i++)37    printf("%f\n", data[i]);38  printf("\n");39 40  // CHECK: 0.00000041  // CHECK: 1.00000042  // CHECK: 2.00000043  // CHECK: 3.00000044  // CHECK: 4.00000045  // CHECK: 5.00000046  // CHECK: 6.00000047  // CHECK: 7.00000048  // CHECK: 8.00000049  // CHECK: 9.00000050  // CHECK: 10.00000051 52  // CHECK: 0.00000053  // CHECK: 1.00000054  // CHECK: 2.00000055  // CHECK: 6.00000056  // CHECK: 4.00000057  // CHECK: 5.00000058  // CHECK: 12.00000059  // CHECK: 7.00000060  // CHECK: 8.00000061  // CHECK: 18.00000062  // CHECK: 10.00000063}64