OpenMP只创建一个线程

时间:2014-09-25 23:54:28

标签: c++ multithreading parallel-processing openmp

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

之下
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

如何进行并行化?

1 个答案:

答案 0 :(得分:1)

如果您使用的是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

我认为默认值通常是特定系统上的核心数。