在Arduino中,不止一次访问“变量”类-英雄云拓展知识分享
254
2024-01-22
我正在使用PTHREADS和EIGEN库编写一个并行程序。我的程序看起来像这样:
#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;&amp; = 0&gt; = 0&amp; amp; amp;&amp;&amp; = xpr.rows() - blockrows&blockrows&amp;&amp;&amp;&amp;&amp;&amp; 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
}
而且我依然遇到相同的毛病。我的猜想是,我定义内涵向量和矩阵的方式是不正确的,但是我找不到任何说甚么是正确的方法。
你有两个 v1
变量:
VectorLD v1; //globalvoid *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
}
免责声明:
本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。
发表评论
暂时没有评论,来抢沙发吧~