0
我正在使用pthreads和特徵庫編寫並行程序。 我的計劃看起來是這樣的:使用C++中的特徵庫定義全局矢量
#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, ...);
...
}
基本上,我需要的向量和矩陣爲全局變量,能夠訪問它們的功能。 程序編譯,但是當我執行它,我收到以下錯誤:
Assertion failed: (startRow >= 0 && blockRows >= 0 && startRow <= xpr.rows() - blockRows && startCol >= 0 && blockCols >= 0 && startCol <= xpr.cols() - blockCols), function Block, file ...
起初我還以爲我是想訪問向量的非法一部分,但後來我改變了「power_method」功能:
void *power_method(int rank){
v1(0); // I can do this from main with no problem
}
我仍然得到相同的錯誤。 我的猜測是,我定義矢量和矩陣的方式是不正確的,但我找不到任何說什麼是正確的方法。