J'écris un programme parallèle en utilisant pthreads et la bibliothèque propre. Mon programme ressemble à ceci:Définir un vecteur global en utilisant la bibliothèque propre en 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, ...);
...
}
J'ai besoin essentiellement les vecteurs et la matrice à des variables globales pour pouvoir y accéder à la fonction. Le programme compile mais quand je l'exécute je reçois l'erreur suivante:
Assertion failed: (startRow >= 0 && blockRows >= 0 && startRow <= xpr.rows() - blockRows && startCol >= 0 && blockCols >= 0 && startCol <= xpr.cols() - blockCols), function Block, file ...
Au début, je pensais que je tentais d'accéder à une partie illégale du vecteur, mais je puis changé la fonction « power_method » pour:
void *power_method(int rank){
v1(0); // I can do this from main with no problem
}
et je reçois toujours la même erreur. Je pense que la façon dont je définis le vecteur et la matrice est incorrecte, mais je n'ai rien trouvé qui indique la bonne façon de procéder.