在c ++中OpenMP中的有序线程ID

时间:2017-04-14 00:33:51

标签: c++ multithreading openmp

我在c ++中使用OpenMP。我想指定线程数(16),然后运行ID为0到15的每个线程。 我有一个16个数字的数组,我想在每个单独的线程中用作参数。所以我有

    omp_set_dynamic(0);
    omp_set_num_threads(16);
    int tid;
#pragma omp parallel shared(myvector) private(tid)
{
    tid = omp_get_thread_num();
    // Do some calculations using myvector[tid]
}

但是,(tid)s的排序不是0到15,因为有些重复两次或更多次。 如何强制它使用16个参数中的每个参数运行一个任务?

1 个答案:

答案 0 :(得分:1)

  

团队中的每个线程都执行并行中的所有语句   区域除了工作共享结构。

我尝试了这个简单的代码

#include <omp.h>
#include <stdio.h>

int main(){
    omp_set_dynamic(0);
    omp_set_num_threads(32);
    int tid;
    double *myvector;
#pragma omp parallel shared(myvector) private(tid)
    {
        tid = omp_get_thread_num();
        printf("Thread number = %d\n",tid);
        // Do some calculations using myvector[tid]
    }
    return 0;
}

并得到了正确的结果:

Thread number = 3
Thread number = 4
Thread number = 0
Thread number = 5
Thread number = 6
Thread number = 7
Thread number = 8
Thread number = 9
Thread number = 10
Thread number = 11
Thread number = 12
Thread number = 13
Thread number = 14
Thread number = 15
Thread number = 1
Thread number = 2

请在您的机器上查看,或者写下您尝试过的代码和输出的更多信息。