Количество нитей в распараллеливании петли с помощью OpenMP в C

Я изучаю 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 ответ

  1. Вы должны указать количество потоков, иначе 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