我正在Intel i5核心机器上开发并行算法,该机器有两个核心,四个线程。
n定义矩阵的大小,我在其上执行计算。从下表中可以看出,从1个线程到2个线程的利用率几乎减少了50%,但是2个线程和4个线程之间几乎没有差别。数字表示通过的秒数
我的编译器是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];
}
}
答案 0 :(得分:4)
好吧,您的计算机有 2核心 和 4个核心 。
您只有2个 核心 ,因此您不会从1到4个线程获得4倍的加速。
其次,当您扩展到更多线程时,您可能会开始遇到资源争用,例如最大化内存带宽。