Search code examples
gcciccopenmp

I got omp_get_num_threads always return 1 in gcc (works in icc)


I have this old question but no answer works for me from online, the code is:

#include "stdio.h"
#include "omp.h"

main ()
{
    omp_set_num_threads(4); //initialise thread count for 4 core cpu                                                                                                                             
    int j;
    printf ("%d\n", omp_get_max_threads());
    printf ("%d\n", omp_get_num_threads());
#pragma omp parallel for
    for (int j=0; j<10; ++j)
        {
            printf ("%d\n", omp_get_num_threads());
            int threadNum;
            threadNum = omp_get_thread_num();
            printf("This is thread %d\n", threadNum);
        }
    }
    return 0;
}

In G++ 4.4.5, linux 2.6.32-5-amd64, it produces:

4
1
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0

If we shift to ICC 12.1.0, it gives me:

4
1
4
This is thread 0
4
This is thread 0
4  
This is thread 0
4
This is thread 1
4
This is thread 1
4
This is thread 1
4
This is thread 2
4 
This is thread 2
4
This is thread 3
4
This is thread 3

Any ideas?


Solution

  • You almost certainly forgot to use the -fopenmp flag when you were compiling.