当增加用于并行化代码其他部分的线程数时,串行代码部分的时序会增加

时间:2018-10-26 21:10:52

标签: c openmp

我正在尝试比较两种算法的时间;一个以串行方式运行,另一个以并行方式运行,我正在使用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;
            }
        }
    }
}

任何人都可以让我知道为什么会这样吗。

0 个答案:

没有答案