xref: /llvm-project/offload/test/api/ompx_3d.cpp (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert // RUN: %libomptarget-compilexx-run-and-check-generic
2*330d8983SJohannes Doerfert 
3*330d8983SJohannes Doerfert #include <omp.h>
4*330d8983SJohannes Doerfert #include <ompx.h>
5*330d8983SJohannes Doerfert #include <stdio.h>
6*330d8983SJohannes Doerfert 
foo(int device)7*330d8983SJohannes Doerfert void foo(int device) {
8*330d8983SJohannes Doerfert   int tid = 0, bid = 0, bdim = 0;
9*330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for map(from                      \
10*330d8983SJohannes Doerfert                                                      : tid, bid, bdim)         \
11*330d8983SJohannes Doerfert     device(device) thread_limit(2) num_teams(5)
12*330d8983SJohannes Doerfert   for (int i = 0; i < 1000; ++i) {
13*330d8983SJohannes Doerfert     if (i == 42) {
14*330d8983SJohannes Doerfert       tid = ompx::block_dim_x();
15*330d8983SJohannes Doerfert       bid = ompx::block_id_x();
16*330d8983SJohannes Doerfert       bdim = ompx::grid_dim_x();
17*330d8983SJohannes Doerfert     }
18*330d8983SJohannes Doerfert   }
19*330d8983SJohannes Doerfert   // CHECK: tid: 2, bid: 1, bdim: 5
20*330d8983SJohannes Doerfert   // CHECK: tid: 2, bid: 0, bdim: 1
21*330d8983SJohannes Doerfert   printf("tid: %i, bid: %i, bdim: %i\n", tid, bid, bdim);
22*330d8983SJohannes Doerfert }
23*330d8983SJohannes Doerfert 
isGPU()24*330d8983SJohannes Doerfert int isGPU() { return 0; }
25*330d8983SJohannes Doerfert #pragma omp declare variant(isGPU) match(device = {kind(gpu)})
isGPUvariant()26*330d8983SJohannes Doerfert int isGPUvariant() { return 1; }
27*330d8983SJohannes Doerfert 
defaultIsGPU()28*330d8983SJohannes Doerfert int defaultIsGPU() {
29*330d8983SJohannes Doerfert   int r = 0;
30*330d8983SJohannes Doerfert #pragma omp target map(from : r)
31*330d8983SJohannes Doerfert   r = isGPU();
32*330d8983SJohannes Doerfert   return r;
33*330d8983SJohannes Doerfert }
34*330d8983SJohannes Doerfert 
main()35*330d8983SJohannes Doerfert int main() {
36*330d8983SJohannes Doerfert   if (defaultIsGPU())
37*330d8983SJohannes Doerfert     foo(omp_get_default_device());
38*330d8983SJohannes Doerfert   else
39*330d8983SJohannes Doerfert     printf("tid: 2, bid: 1, bdim: 5\n");
40*330d8983SJohannes Doerfert   foo(omp_get_initial_device());
41*330d8983SJohannes Doerfert }
42