我正在使用pthreads和特征库编写并行程序。 我的程序看起来像这样:
#include <Eigen/...>
#include <pthread.h>
...
typedef Eigen::SparseMatrix<long double> matrizLD;
matrizLD mat;
typedef Eigen::Matrix<long double, Dynamic, 1> VectorLD;
VectorLD v1;
VectorLD v2;
void *power_method(int rank){
...
int from = from_array[rank]
int length = length_array[rank]
v1.segment(from,length) = mat.block(from,0,length,size)*v2; //something like this
}
int main(...){
size = ...; //an input parameter
matrizLD mat(size,size) = ...;
VectorLD v1(size) = ...;
VectorLD v2(size) = ...;
...
pthread_create(..., power_method, ...);
...
}
我基本上需要向量和矩阵作为全局变量才能在函数中访问它们。 程序编译但是当我执行它时,我收到以下错误:
断言失败:(startRow&gt; = 0&amp;&amp; blockRows&gt; = 0&amp;&amp; startRow&lt; = xpr.rows() - blockRows&amp;&amp; startCol&gt; = 0&amp;&amp; blockCols &gt; = 0&amp;&amp; startCol&lt; = xpr.cols() - blockCols),功能块,文件......
起初我以为我试图访问向量的非法部分,但后来我更改了“power_method”函数:
void *power_method(int rank){
v1(0); // I can do this from main with no problem
}
我仍然得到同样的错误。 我的猜测是我定义向量和矩阵的方式不正确,但我找不到任何说明正确方法的东西。
答案 0 :(得分:0)
您有两个v1
个变量:
VectorLD v1; //global
void *power_method(int rank){
v1.segment(from,length) = mat.block(from,0,length,size)*v2; //something like this
}
int main(...){
size = ...; //an input parameter
VectorLD v1(size) = ...; //oops another one
}
您需要初始化全局变量。我推测像
这样的东西int main(...){
size = ...; //an input parameter
v1 = VectorLD(size);// global one
}