| // RUN: %libomp-compile |
| // RUN: env KMP_HOT_TEAMS_MODE=0 KMP_HOT_TEAMS_MAX_LEVEL=1 %libomp-run |
| // |
| // Force the defaults of: |
| // KMP_HOT_TEAMS_MODE=0 means free extra threads after parallel |
| // involving non-hot team |
| // KMP_HOT_TEAMS_MAX_LEVEL=1 means only the initial outer team |
| // is a hot team. |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <omp.h> |
| |
| int main() { |
| int a; |
| omp_set_max_active_levels(2); |
| // This nested parallel creates extra threads on the thread pool |
| #pragma omp parallel num_threads(2) |
| { |
| #pragma omp parallel num_threads(2) |
| { |
| #pragma omp atomic |
| a++; |
| } |
| } |
| |
| // Causes assert if hidden helper thread tries to allocate from thread pool |
| // instead of creating new OS threads |
| #pragma omp parallel num_threads(1) |
| { |
| #pragma omp target nowait |
| { a++; } |
| } |
| |
| return EXIT_SUCCESS; |
| } |