在C中使用OpenMP进行循环并行化的线程数

时间:2017-01-16 04:50:46

标签: multithreading openmp

这些天我正在学习OpenMP。我在互联网上阅读了很多博客,阅读完之后,我对“循环并行化中的线程数”有了一个非常普遍的疑问。以下面的例子为例

int x,y;
#pragma omp parallel for private(y)
for(x=0; x < width; x++)
{
    for(y=0; y < height; y++)
    {
        finalImage[x][y] = RenderPixel(x,y, &sceneData);
    }
}

在此示例中,有多少线程用于并行化。它是标准方式还是应该明确说明线程数??

1 个答案:

答案 0 :(得分:0)

您必须指定线程数,否则OPENMP将自动使用可用的线程。 您可以打印如下所示的线程数

    #pragma omp parallel private(tid)
    {
        tid=omp_get_thread_num();
        if(tid==0){
            nthreads=omp_get_num_threads();
            printf("Number of threads = %d\n",nthreads);
        }

为了运行具有特定数字(此处为2)的线程的程序,在bash中,您可以像以下一样运行

OMP_NUM_THREADS=2 ./program