brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · a3e8d10 Raw
63 lines · c
1// This test checks that #pragma omp target update from(data1[0:3:4],2// data2[0:2:5]) correctly updates disjoint strided sections of multiple arrays3// from the device to the host.4 5// RUN: %libomptarget-compile-run-and-check-generic6#include <omp.h>7#include <stdio.h>8 9int main() {10  int len = 12;11  double data1[len], data2[len];12 13// Initial values14#pragma omp target map(tofrom : data1[0 : len], data2[0 : len])15  {16    for (int i = 0; i < len; i++) {17      data1[i] = i;18      data2[i] = i * 10;19    }20  }21 22  printf("original host array values:\n");23  printf("data1: ");24  for (int i = 0; i < len; i++)25    printf("%.1f ", data1[i]);26  printf("\ndata2: ");27  for (int i = 0; i < len; i++)28    printf("%.1f ", data2[i]);29  printf("\n\n");30 31#pragma omp target data map(to : data1[0 : len], data2[0 : len])32  {33// Modify arrays on device34#pragma omp target35    {36      for (int i = 0; i < len; i++)37        data1[i] += i;38      for (int i = 0; i < len; i++)39        data2[i] += 100;40    }41 42// data1[0:3:4]  // indices 0,4,843// data2[0:2:5]  // indices 0,544#pragma omp target update from(data1[0 : 3 : 4], data2[0 : 2 : 5])45  }46 47  printf("device array values after update from:\n");48  printf("data1: ");49  for (int i = 0; i < len; i++)50    printf("%.1f ", data1[i]);51  printf("\ndata2: ");52  for (int i = 0; i < len; i++)53    printf("%.1f ", data2[i]);54  printf("\n\n");55 56  // CHECK: data1: 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.057  // CHECK: data2: 0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.058 59  // CHECK: data1: 0.0 1.0 2.0 3.0 8.0 5.0 6.0 7.0 16.0 9.0 10.0 11.060  // CHECK: data2: 100.0 10.0 20.0 30.0 40.0 150.0 60.0 70.0 80.0 90.0 100.061  // 110.062}63