Синхронизация части последовательного кода увеличивается при увеличении количества потоков, используемых для распараллеливания другой части кода. - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь сравнить время двух алгоритмов;один запускается последовательно, а другой - параллельно, и я использую omp_get_wtime () для получения времени выполнения функций.Когда число потоков увеличивается до 2, тогда время выполнения последовательной части удваивается, даже если время параллельной части корректно сокращается.Поскольку число потоков в параллельной части увеличивается, синхронизация последовательной части увеличивается пропорционально.

Пример кода параллелизуемой части:

void constraints(int pop[], double gain[], double gammma[], double snr, int numberOfLinks, int chromosomes, int links,int (*cv)[])
{
    int i, j, k;
    double interference[chromosomes*links];
#pragma omp parallel for private(i,j,k) num_threads(4)
    for(i = 0; i < chromosomes; i++)
    {
        (*cv)[i] = 0;
        for(j = 0; j < links; j++)
        {
            interference[i * links + j] = 0;
            for(k = 0; k < links; k++)
            {
                if(k != j)
                {
                    interference[i * links + j] = interference[i * links + j] + pop[i * links + k] * gain[k * numberOfLinks + j];

                }
            }

            if (((gain[j * numberOfLinks + j]/(interference[i * links + j] + 1/snr)) < gammma[j]) && (pop[i * links + j] == 1))
            {

                (*cv)[i] = (*cv)[i] + 1;
            }
        }
    }
}

Может ли кто-нибудь, пожалуйста, дайте мнезнаю, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...