MPI,避免复制非常大的对象

时间:2013-10-17 16:04:27

标签: c++ mpi shared-memory

我有一个C ++类的大型实例,在我的序列代码中包含许多指针和对大量数据结构的引用。现在需要实现一个使用MPI并行工作的线性求解器。请注意,代码将在共享内存架构上运行,而不是在群集上运行。我担心我应该重写我的程序的整个类结构。

但是,我想知道是否有一种安全的方法可以在所有其他进程中访问由主进程创建的大型对象。

我搜索了很多,但唯一的方法似乎是在序列化后发送/接收数据,例如使用boost会导致在运行时重复复制一堆数据。

我的代码的当前结构是:

    int main()
    { 
      my_data struct1;
      read_file(&struct1);

      my_data struct2;
      read_file(&struct2);

      data_container data(&struct1, &struct2);

      float time = 0;

      while(time < end_time)
      {    
        do_some_calc(&data);

       //a linear solver should be added here.
        sparse_matrix MATRIX;
        vector RHS, unknowns;
        create_coeff_matrix(&data, &MATRIX);
        create_RHS_vector(&data, &RHS);
        trilinos_solver(&MATRIX, &RHS, &unknowns);
      //--------------------------------------------

        update(&data, &unknowns);
        time++;
      }
      return 0;
    }

0 个答案:

没有答案