1// clang-format off
2// RUN: %libomptarget-compilexx-generic && %libomptarget-run-generic 2>&1 | %fcheck-generic
3// clang-format on
4
5// UNSUPPORTED: aarch64-unknown-linux-gnu
6// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
7// UNSUPPORTED: x86_64-unknown-linux-gnu
8// UNSUPPORTED: x86_64-unknown-linux-gnu-LTO
9// UNSUPPORTED: s390x-ibm-linux-gnu
10// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
11
12// REQUIRES: amdgcn-amd-amdhsa
13
14#include <omp.h>
15#include <stdio.h>
16
17#define N 100
18
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 parallel for schedule(dynamic, chunk) \
28 map(tofrom : result[ : N])
29 for (i = lb; i < ub; i += stride) {
30 result[i] += i;
31 }
32
33 int value = 0;
34 bool success = true;
35 for (i = 0; i < N; i += stride) {
36 if (value != result[i]) {
37 printf(format: "ERROR: result[%d] = %d instead of %d\n", i, result[i], value);
38 success = false;
39 break;
40 }
41 value += stride;
42 }
43
44 return success;
45}
46
47int main() {
48 // CHECK: SUCCESS CHUNK SIZE 1
49 if (schedule(lb: 0, N, stride: 5, chunk: 1))
50 printf(format: "SUCCESS CHUNK SIZE 1\n");
51
52 // CHECK: SUCCESS CHUNK SIZE 3
53 if (schedule(lb: 0, N, stride: 5, chunk: 3))
54 printf(format: "SUCCESS CHUNK SIZE 3\n");
55
56 return 0;
57}
58

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of offload/test/offloading/dynamic-schedule.cpp