具有多个核心的mpirun较慢的非MPI程序

时间:2015-08-15 16:19:00

标签: c++ parallel-processing openmpi

我有以下非MPI程序用于计算随机向量的平均值,每个并行进程生成不同的随机向量:

tran2.png

我使用g ++ 4.8编译程序,并使用

运行它
#include <iostream>
#include <algorithm>
#include <vector> 

int main(int argc, char* argv[]) {

 clock_t begin = clock();
 size_t N(10000000);
 double avg(0.0);
 int ID(atoi(argv[1]));

 //Random seed for each process
 srand(time(NULL) + ID);

 std::vector<int> v1(N);

 for(size_t n=0; n<N; n++) {
  v1[n] = rand() % 100;
  avg += v1[n]/double(N);
 }

 clock_t end = clock();

 std::cout<<"Process "<<ID<<": Average = "<<avg<<std::endl;
 std::cout<<"Process "<<ID<<": Time taken = "<<double(end -     begin)/CLOCKS_PER_SEC<<" seconds"<<std::endl;

 return 0;

}                 

对于单个进程(N = 1),即未并行化,我得到输出

 mpirun -np N bash -c './test.exe $OMPI_COMM_WORLD_RANK'

而使用两个过程(N = 2),每个过程需要更长的时间:

Process 0: Average = 49.5008
Process 0: Time taken = 0.295664 seconds

与N = 2绑定到核心仍然使得其中一个进程与N = 1情况一样快,但另一个进程仍然很慢。我有一台4芯机器。

这里有一些竞争条件(我不明白为什么)?我错过了什么?

0 个答案:

没有答案