ad

使用C ++中的特点库定义内涵全局矢量-英雄云拓展知识分享

匿名投稿 254 2024-01-22

我正在使用PTHREADS和EIGEN库编写一个并行程序。我的程序看起来像这样:

#include <Eigen/...>

#include <pthread.h>

...

typedef Eigen::SparseMatrix<long double> matrizLD;

matrizLD mat;

使用C ++中的特点库定义内涵全局矢量-英雄云拓展知识分享

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; //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

}


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:C ++ pthreads
上一篇:如何针对屏幕尺寸为元素制作动态宽度?-英雄云拓展知识分享
下一篇:如何使用低代码平台搭建高效财务系统?- 一步步指南
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×