/* { dg-do run } */ /* This tests usage of ICVs on the host and on devices if no corresponding environment variables are configured. */ #include #include int main () { if (omp_get_max_teams () != 0 || omp_get_teams_thread_limit () != 0) abort (); omp_set_num_teams (9); omp_set_teams_thread_limit (2); if (omp_get_max_teams () != 9 || omp_get_teams_thread_limit () != 2) abort (); #pragma omp teams if (omp_get_num_teams () > 9 || omp_get_team_num () >= 9) abort (); #pragma omp teams num_teams(5) if (omp_get_num_teams () > 5 || omp_get_team_num () >= 5) abort (); int num_devices = omp_get_num_devices () > 3 ? 3 : omp_get_num_devices (); for (int i = 0; i < num_devices; i++) { #pragma omp target device (i) if (omp_get_max_teams () != 0 || omp_get_teams_thread_limit () != 0) abort (); #pragma omp target device (i) { omp_set_num_teams (8 + i); omp_set_teams_thread_limit (3 + i); if (omp_get_max_teams () != 8 + i || omp_get_teams_thread_limit () != 3 + i) abort (); } /* omp_set_num_teams above set the value of nteams-var ICV on device 'i', which has scope 'device' and should be avaible in subsequent target regions. */ #pragma omp target device (i) if (omp_get_max_teams () != 8 + i || omp_get_teams_thread_limit () != 3 + i) abort (); #pragma omp target device (i) #pragma omp teams if (omp_get_num_teams () > 8 + i || omp_get_team_num () >= 8 + i) abort (); /* NUM_TEAMS clause has priority over previously set NUM_TEAMS value. */ #pragma omp target device (i) #pragma omp teams num_teams(5 + i) if (omp_get_num_teams () > 5 + i || omp_get_team_num () >= 5 + i) abort (); } return 0; }