Я пытаюсь сравнить время двух алгоритмов;один запускается последовательно, а другой - параллельно, и я использую 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;
}
}
}
}
Может ли кто-нибудь, пожалуйста, дайте мнезнаю, почему это происходит.