OpenMP set_num_threads() is not working

前端 未结 5 1223
说谎
说谎 2020-11-30 01:01

I am writing a parallel program using OpenMP in C++.

I want to control the number of threads in the program using omp_set_num_threads(), but it does not

5条回答
  •  自闭症患者
    2020-11-30 01:38

    Besides calling omp_get_num_threads() outside of the parallel region in your case, calling omp_set_num_threads() still doesn't guarantee that the OpenMP runtime will use exactly the specified number of threads. omp_set_num_threads() is used to override the value of the environment variable OMP_NUM_THREADS and they both control the upper limit of the size of the thread team that OpenMP would spawn for all parallel regions (in the case of OMP_NUM_THREADS) or for any consequent parallel region (after a call to omp_set_num_threads()). There is something called dynamic teams that could still pick smaller number of threads if the run-time system deems it more appropriate. You can disable dynamic teams by calling omp_set_dynamic(0) or by setting the environment variable OMP_DYNAMIC to false.

    To enforce a given number of threads you should disable dynamic teams and specify the desired number of threads with either omp_set_num_threads():

    omp_set_dynamic(0);     // Explicitly disable dynamic teams
    omp_set_num_threads(4); // Use 4 threads for all consecutive parallel regions
    #pragma omp parallel ...
    {
        ... 4 threads used here ...
    }
    

    or with the num_threads OpenMP clause:

    omp_set_dynamic(0);     // Explicitly disable dynamic teams
    // Spawn 4 threads for this parallel region only
    #pragma omp parallel ... num_threads(4)
    {
        ... 4 threads used here ...
    }
    

提交回复
热议问题