brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · b970f59 Raw
61 lines · cpp
1// clang-format off2// RUN: %libomptarget-compilexx-generic && %libomptarget-run-generic 2>&1 | %fcheck-generic3// clang-format on4 5// UNSUPPORTED: aarch64-unknown-linux-gnu6// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO7// UNSUPPORTED: x86_64-unknown-linux-gnu8// UNSUPPORTED: x86_64-unknown-linux-gnu-LTO9// UNSUPPORTED: s390x-ibm-linux-gnu10// UNSUPPORTED: s390x-ibm-linux-gnu-LTO11 12// REQUIRES: amdgcn-amd-amdhsa13 14#include <omp.h>15#include <stdio.h>16 17#define N 10018 19bool schedule(int lb, int ub, int stride, int chunk) {20  int i;21 22  int result[N];23  for (i = 0; i < N; i++) {24    result[i] = 0;25  }26 27#pragma omp target map(tofrom : result[ : N])28  {29    int a = 0;30#pragma omp parallel for schedule(dynamic, chunk)31    for (i = lb; i < ub; i += stride) {32      result[i] += i + a;33    }34  }35 36  int value = 0;37  bool success = true;38  for (i = 0; i < N; i += stride) {39    if (value != result[i]) {40      printf("ERROR: result[%d] = %d instead of %d\n", i, result[i], value);41      success = false;42      break;43    }44    value += stride;45  }46 47  return success;48}49 50int main() {51  // CHECK: SUCCESS CHUNK SIZE 152  if (schedule(0, N, 5, 1))53    printf("SUCCESS CHUNK SIZE 1\n");54 55  // CHECK: SUCCESS CHUNK SIZE 356  if (schedule(0, N, 5, 3))57    printf("SUCCESS CHUNK SIZE 3\n");58 59  return 0;60}61