1

我正在英特尔 i5 核机器上开发一种并行算法,它有两个内核,四个线程。

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

#of 线程 - 计算时间

我的编译器是 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];
        }
    }
4

1 回答 1

4

嗯,你的机器有24 线程

你只有 2 个核心,所以你不会从 1-4 个线程获得 4 倍的加速。

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

于 2012-04-07T18:55:33.163 回答