我有以下程序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实现有关吗?