MPI:当处理器数量增加时,输出时间增加

时间:2015-02-07 11:38:47

标签: c++ performance output mpi execution-time

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

问题:我需要在已经与MPI并行化的程序中的.txt文件中打印稀疏矩阵作为3-ples(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;
}

我的秒表sw使用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打印输出时完成。你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好吧,我终于明白是什么导致了这个问题。在Linux虚拟机上运行我的程序,在MPI上并行化,大大增加了在增加使用的核心数量时在.txt文件中打印大量数据的时间。问题是由虚拟机引起的,使用MPI时行为不正常。我在物理8核机器上测试了相同的程序,打印输出的时间并没有随着使用的核心数量而增加。