47 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include "omp_testsuite.h"4 5int test_omp_parallel_num_threads()6{7 int num_failed;8 int threads;9 int nthreads;10 int max_threads = 0;11 12 num_failed = 0;13 14 /* first we check how many threads are available */15 #pragma omp parallel16 {17 #pragma omp master18 max_threads = omp_get_num_threads ();19 }20 21 /* we increase the number of threads from one to maximum:*/22 for(threads = 1; threads <= max_threads; threads++) {23 nthreads = 0;24 #pragma omp parallel reduction(+:num_failed) num_threads(threads)25 {26 num_failed = num_failed + !(threads == omp_get_num_threads());27 #pragma omp atomic28 nthreads += 1;29 }30 num_failed = num_failed + !(nthreads == threads);31 }32 return (!num_failed);33}34 35int main()36{37 int i;38 int num_failed=0;39 40 for(i = 0; i < REPETITIONS; i++) {41 if(!test_omp_parallel_num_threads()) {42 num_failed++;43 }44 }45 return num_failed;46}47