小编use*_*157的帖子

C++中OpenMPI的成本

我有以下程序C++程序,它不使用通信,并且在所有内核上完成相同的相同工作,我知道这根本不使用并行处理:

unsigned n = 130000000;
std::vector<double>vec1(n,1.0);
std::vector<double>vec2(n,1.0);
double precision :: t1,t2,dt;
t1 = MPI_Wtime();
for (unsigned i = 0; i < n; i++) 
{
  // Do something so it's not a trivial loop
  vec1[i] = vec2[i]+i;
}
t2 = MPI_Wtime();
dt = t2-t1;
Run Code Online (Sandbox Code Playgroud)

我在一个带有两个Intel®Xeon®处理器E5-2690 v3的节点上运行这个程序,所以我有24个核心.这是一个专用节点,没有其他人在使用它.由于没有通信,并且每个处理器正在执行相同数量的(相同)工作,因此在多个处理器上运行它应该给出相同的时间.但是,我得到以下时间(所有核心的平均时间):

1核心:0.237

2芯:0.240

4核:0.241

8核:0.261

16核:0.454

什么可能导致时间的增加?特别适用于16个核心.我已经运行了callgrind,我在所有内核上获得了大致相同数量的数据/指令未命中(未命中的百分比相同).

我在一个带有两个Intel®Xeon®处理器E5-2628L v2的节点上重复了相同的测试(共有16个内核),我观察到执行时间的增加.这与MPI实现有关吗?

c++ performance mpi openmpi

5
推荐指数
1
解决办法
241
查看次数

标签 统计

c++ ×1

mpi ×1

openmpi ×1

performance ×1