关于核心数量的并行化限制

时间:2012-04-07 18:51:03

标签: c++ gcc parallel-processing openmp

我正在Intel i5核心机器上开发并行算法,该机器有两个核心,四个线程。

n定义矩阵的大小,我在其上执行计算。从下表中可以看出,从1个线程到2个线程的利用率几乎减少了50%,但是2个线程和4个线程之间几乎没有差别。数字表示通过的秒数

#of threads - computation time

我的编译器是windows平台上的mingw-gcc。我的并行化工具是openmp。我在并行例程的开头用omp_set_num_threads(numThreads);定义了线程数。

我无法在“真正的”8核机器上测试算法。在我的i5机器上,在1个线程上,任务管理器显示使用了总cpu功率的25%。在2个线程中,它是50%,在4个线程中,它按预期的96-99%。

那么这种情况可能是什么原因?为什么计算时间不会减半?

并行代码段位于以下位置:

    #pragma omp parallel for schedule(guided) shared(L,A) \
    private(i)
    for (i=k+1;i<row;i++){
        double dummy = 0;
        for (int nn=0;nn<k;nn++){
            dummy += L[i][nn]*L[k][nn];
            L[i][k] = (A[i][k] - dummy)/L[k][k];
        }
    }

1 个答案:

答案 0 :(得分:4)

好吧,您的计算机有 2核心 4个核心

您只有2个 核心 ,因此您不会从1到4个线程获得4倍的加速。

其次,当您扩展到更多线程时,您可能会开始遇到资源争用,例如最大化内存带宽。