我正在英特尔 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];
}
}