2014-09-25 113 views
0

我使用Ubuntu并编写了几行代码。但它只创建一个线程。当我在我的终端上运行nproc命令时,输出为2。我的代码如下OpenMP只创建一个线程

int nthreads, tid; 

#pragma omp parallel private(tid) 
{ 
    tid = omp_get_thread_num(); 
    printf("Thread = %d\n", tid); 

    /* for only main thread */ 
    if (tid == 0) 
    { 
     nthreads = omp_get_num_threads(); 
     printf("Number of threads = %d\n", nthreads); 
    } 
} 

输出:

Thread = 0 
Number of threads = 1 

我该怎么办并行?

回答

0

如果你正在使用gcc/G ++,你必须确保你能够openmp扩展与-fopenmp编译连接选项。在链接期间指定它将链接到相应的库(-lgomp)。

编译的东西,如:

g++ -fopenmp myfile.c -o exec 

或:

g++ -c myfile.c -fopenmp 
g++ -o exec myfile.o -fopenmp 

如果你离开了-fopenmp编译选项你的程序将编译,但好像没有被使用的OpenMP它将运行。如果你的程序不使用omp_set_num_threads设置,他们可以通过命令行来设置线程数:

OMP_NUM_THREADS=8 ./exec 

我觉得默认的一般是内核的特定系统上的号码。

+1

ok。我明白了。再次敲击。 – andressophia 2014-09-26 01:43:22

+0

不客气。很高兴你得到它我修改我的答案更多的细节。另外我还提到了OMP_NUM_THREADS环境变量。 – 2014-09-26 01:52:17

+0

我刚试过这些。感谢您的回答。 – andressophia 2014-09-26 02:05:25