我使用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
如何进行并行化?
答案 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
我认为默认值通常是特定系统上的核心数。