MPI:输出时间随着处理器数量的增加而增加

MPI: time for output increases when the number of processors increase

本文关键字:增加 处理器 输出 时间 MPI      更新时间:2023-10-16

我在c++/mpi程序中打印稀疏矩阵时遇到问题,希望您能帮我解决。

问题:我需要在一个使用MPI并行化的程序中,在.txt文件中打印一个稀疏矩阵,作为3个像素(x,y,v_xy)的列表。由于我是MPI的新手,所以我决定不处理库提供的并行IO指令,而是让主处理器(在我的情况下为0)打印输出。然而,当我增加处理器的数量时,打印矩阵的时间会增加:

  • 1个处理器:11,7秒
  • 2个处理器:26.4秒
  • 4个处理器:25.4秒

我已经验证了这三种情况下的输出完全相同。以下是代码的相关部分:

if (rank == 0)
{    
    sw.start();
    std::ofstream ofs_output(output_file);
    targets.print(ofs_output);
    ofs_output.close();
    sw.stop();
    time_output = sw.get_duration();
    std::cout << time_output << std::endl;
}

我的秒表开关正在使用gettimeofday功能测量墙上的时钟时间。目标矩阵的print方法如下:

void sparse_matrix::print(std::ofstream &ofs)
{
    int temp_row;
    for (const_iterator iter_row = _matrix.begin(); iter_row != _matrix.end(); ++iter_row)
    {
        temp_row = (*iter_row).get_key();
        for (value_type::const_iterator iter_col = (*iter_row).get_value().begin();
        iter_col != (*iter_row).get_value().end(); ++iter_col)
        {
            ofs << temp_row << "," << (*iter_col).get_key() << "," << (*iter_col).get_value() << std::endl;
        }
    }
}

我不明白是什么导致了速度减慢,因为只有处理器0进行输出,而这是程序的最后一次操作:所有其他处理器都完成了,而处理器0打印输出。你知道吗?

好吧,我终于明白了问题的原因。在linux虚拟机上运行我的程序,在MPI上并行化,大大增加了在.txt文件中打印大量数据的时间,同时增加了使用的内核数量。该问题是由虚拟机引起的,该虚拟机在使用MPI时行为不正确。我在一台8核物理机器上测试了同样的程序,打印输出的时间不会随着使用的核数而增加。