我有一个小问题,但我不知道如何解决它。
让我们开始吧: 我需要使用多线程处理一个大的Eigen矩阵。 每个线程都需要访问矩阵。维度是在程序执行期间指定的,因此我必须在main()中声明它,而不是全局声明。我尝试了不同的解决方我搜索类似“通过引用传递”的东西,但我读到这个方法不适用于Eigen Matrix。 这里有一个小例子。有人能告诉我怎样才能解决这个问题?程序需要很快,所以类似于: - 在文件中保存矩阵,在每个线程中读取文件,在矩阵上工作,将矩阵保存在文件中,从主文件中重新读取文件 - 不是最好的方式,我认为...;)有人知道更好的解决方案吗? 谢谢!
void calc() {
// work on the Matrix
}
int main() {
Eigen::Matrix<bool, a, b> Mat;
// Start some thread(calc);
cout << Mat;
}
答案 0 :(得分:0)
Si!特征矩阵可以作为参考传递。
这是一个有效的例子:
#include <iostream>
#include <Eigen/Dense>
void calc(Eigen::MatrixXf& mat) {
mat = Eigen::MatrixXf::Constant(mat.rows(), mat.cols(), 1.0);
}
int main() {
Eigen::MatrixXf Mat;
Mat = Eigen::Matrix4f::Identity();
std::cout << Mat << std::endl;
calc(Mat);
std::cout << Mat << std::endl;
}
输出:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1