xref: /llvm-project/offload/test/offloading/default_thread_limit.c (revision 3c8efd79283b4c9d25483bc69e3096ccdbddddef)
1330d8983SJohannes Doerfert // clang-format off
2330d8983SJohannes Doerfert // RUN: %libomptarget-compile-generic
3330d8983SJohannes Doerfert // RUN: env LIBOMPTARGET_INFO=16 \
4330d8983SJohannes Doerfert // RUN:   %libomptarget-run-generic 2>&1 | %fcheck-generic --check-prefix=DEFAULT
5*3c8efd79SJohannes Doerfert // RUN: %libomptarget-compile-generic -g
6*3c8efd79SJohannes Doerfert // RUN: env LIBOMPTARGET_INFO=16 \
7*3c8efd79SJohannes Doerfert // RUN:   %libomptarget-run-generic 2>&1 | %fcheck-generic --check-prefix=DEFAULT
8330d8983SJohannes Doerfert 
988234488SEthan Luis McDonough // REQUIRES: amdgpu
10330d8983SJohannes Doerfert 
11330d8983SJohannes Doerfert __attribute__((optnone)) int optnone() { return 1; }
12330d8983SJohannes Doerfert 
13330d8983SJohannes Doerfert int main() {
14330d8983SJohannes Doerfert   int N = optnone() * 4098 * 32;
15330d8983SJohannes Doerfert 
16330d8983SJohannes Doerfert // DEFAULT: [[NT:(128|256)]] (MaxFlatWorkGroupSize: [[NT]]
17330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for simd
18330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
19330d8983SJohannes Doerfert     optnone();
20330d8983SJohannes Doerfert   }
21330d8983SJohannes Doerfert // DEFAULT: [[NT:(128|256)]] (MaxFlatWorkGroupSize: [[NT]]
22330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for simd
23330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
24330d8983SJohannes Doerfert     optnone();
25330d8983SJohannes Doerfert   }
26330d8983SJohannes Doerfert // DEFAULT: [[NT:(128|256)]] (MaxFlatWorkGroupSize: [[NT]]
27330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for simd
28330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
29330d8983SJohannes Doerfert     optnone();
30330d8983SJohannes Doerfert   }
31330d8983SJohannes Doerfert // DEFAULT: [[NT:(128|256)]] (MaxFlatWorkGroupSize: [[NT]]
32330d8983SJohannes Doerfert #pragma omp target
33330d8983SJohannes Doerfert #pragma omp teams distribute parallel for
34330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
35330d8983SJohannes Doerfert     optnone();
36330d8983SJohannes Doerfert   }
37330d8983SJohannes Doerfert // DEFAULT: 42 (MaxFlatWorkGroupSize: 1024
38330d8983SJohannes Doerfert #pragma omp target thread_limit(optnone() * 42)
39330d8983SJohannes Doerfert #pragma omp teams distribute parallel for
40330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
41330d8983SJohannes Doerfert     optnone();
42330d8983SJohannes Doerfert   }
43330d8983SJohannes Doerfert // DEFAULT: 42 (MaxFlatWorkGroupSize: 42
44330d8983SJohannes Doerfert #pragma omp target thread_limit(optnone() * 42) ompx_attribute(__attribute__((amdgpu_flat_work_group_size(42, 42))))
45330d8983SJohannes Doerfert #pragma omp teams distribute parallel for
46330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
47330d8983SJohannes Doerfert     optnone();
48330d8983SJohannes Doerfert   }
49330d8983SJohannes Doerfert // DEFAULT: 42 (MaxFlatWorkGroupSize: 42
50330d8983SJohannes Doerfert #pragma omp target ompx_attribute(__attribute__((amdgpu_flat_work_group_size(42, 42))))
51330d8983SJohannes Doerfert #pragma omp teams distribute parallel for
52330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
53330d8983SJohannes Doerfert     optnone();
54330d8983SJohannes Doerfert   }
55330d8983SJohannes Doerfert // DEFAULT: MaxFlatWorkGroupSize: 1024
56330d8983SJohannes Doerfert #pragma omp target
57330d8983SJohannes Doerfert #pragma omp teams distribute parallel for num_threads(optnone() * 42)
58330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
59330d8983SJohannes Doerfert     optnone();
60330d8983SJohannes Doerfert   }
61330d8983SJohannes Doerfert // DEFAULT: MaxFlatWorkGroupSize: 1024
62330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for thread_limit(optnone() * 42)
63330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
64330d8983SJohannes Doerfert     optnone();
65330d8983SJohannes Doerfert   }
66330d8983SJohannes Doerfert // DEFAULT: MaxFlatWorkGroupSize: 1024
67330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for num_threads(optnone() * 42)
68330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
69330d8983SJohannes Doerfert     optnone();
70330d8983SJohannes Doerfert   }
71330d8983SJohannes Doerfert // DEFAULT: 9 (MaxFlatWorkGroupSize: 9
72330d8983SJohannes Doerfert #pragma omp target
73330d8983SJohannes Doerfert #pragma omp teams distribute parallel for num_threads(9)
74330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
75330d8983SJohannes Doerfert     optnone();
76330d8983SJohannes Doerfert   }
77330d8983SJohannes Doerfert // DEFAULT: 4 (MaxFlatWorkGroupSize: 4
78330d8983SJohannes Doerfert #pragma omp target thread_limit(4)
79330d8983SJohannes Doerfert #pragma omp teams distribute parallel for
80330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
81330d8983SJohannes Doerfert     optnone();
82330d8983SJohannes Doerfert   }
83330d8983SJohannes Doerfert // DEFAULT: 4 (MaxFlatWorkGroupSize: 4
84330d8983SJohannes Doerfert #pragma omp target
85330d8983SJohannes Doerfert #pragma omp teams distribute parallel for thread_limit(4)
86330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
87330d8983SJohannes Doerfert     optnone();
88330d8983SJohannes Doerfert   }
89330d8983SJohannes Doerfert // DEFAULT: 9 (MaxFlatWorkGroupSize: 9
90330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for num_threads(9)
91330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
92330d8983SJohannes Doerfert     optnone();
93330d8983SJohannes Doerfert   }
94330d8983SJohannes Doerfert // DEFAULT: 4 (MaxFlatWorkGroupSize: 4
95330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for simd thread_limit(4)
96330d8983SJohannes Doerfert   for (int i = 0; i < N; ++i) {
97330d8983SJohannes Doerfert     optnone();
98330d8983SJohannes Doerfert   }
99330d8983SJohannes Doerfert }
100330d8983SJohannes Doerfert 
101