在MPI中使用Armadillo稀疏矩阵

时间:2016-03-13 06:09:37

标签: c++ mpi armadillo

我试图在MPI中初始化Armadillo稀疏matriix sp_mat,如下所示:

if(rank==0)
{  // some code for locations, values
    sp_mat X(locations,values)
}
// this is where I want to use X
if(rank==0)
   some_fun(X)

如您所见,Armadillo构造函数是if block的本地构造函数,因此在if block之后无法使用它。 用另一种方式提出同样的问题:

extern sp_mat X
if(rank==0)
{  // some code for locations, values
    sp_mat X(locations,values)
}
// this is where I want to use X
 if(rank==0)
   some_fun(X)

extern sp_mat X之前使用if block也无济于事(我收到了未定义的引用错误) 如何初始化X并在之后重复使用?

2 个答案:

答案 0 :(得分:1)

使用(智能)指针:

std::unique_ptr<sp_mat> X; // or std::shared_ptr<sp_mat> or sp_mat*
if (rank == 0) {
   // some code for locations and values     
   X = std::unique_ptr<sp_mat>(new sp_mat(locations, values));
}
...
if (rank == 0)
   some_fun(*X);

答案 1 :(得分:1)

不是使用指针技巧,而是可以使用来自C ++ 11的更清晰的std::move()

sp_mat X;

if(rank==0)
{  // some code for locations, values
    X = std::move( sp_mat(locations,values) );
}