我的串行代码中有一个 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;
}