我正在尝试比较两种算法的时间;一个以串行方式运行,另一个以并行方式运行,我正在使用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;
}
}
}
}
任何人都可以让我知道为什么会这样吗。