【发布时间】:2019-09-12 13:39:50
【问题描述】:
我的程序以串行方式运行良好,但是当我尝试使用 tbb 并行化它时出现分段错误。
我是 tbb 新手。我的程序很简单,但我不知道为什么会出错。我希望我能在这里得到一些帮助。下面是我的程序。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <tbb/tbb.h>
using namespace std;
using namespace cv;
class test{
public:
Mat * imgarr;
test(){
imgarr = new Mat[10];
for(int i =0 ;i<10;i++){
imgarr[i] = Mat::zeros(10,10,CV_64F);
}
}
void add(int i) const {
Mat& tmp = imgarr[i];
tmp(Range(0,10),Range(0,10)) += 1;
}
void operator()(tbb::blocked_range<int>& r) const {
for(int i = r.begin();i != r.end();i++){
add(i);
}
}
~test(){
delete[] imgarr;
}
};
int main(){
test a;
tbb::parallel_for(tbb::blocked_range<int>(0,10), a);
for(int i =0 ;i< 3;i++){
cout << a.imgarr[0]<<endl;
}
return 0;
}
【问题讨论】:
-
这个问题似乎根本没有包括任何解决问题的尝试。请编辑问题以显示您尝试过的内容,并使用Minimal, Reproducible Example 显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask。
-
@liakoyras 很抱歉我没有在我的问题中显示太多有用的信息,我会更加关注社区规则。但我认为我的 sn-p 足够可重复且足够紧凑任何有 tbb 经验的人都可以告诉他们出了什么问题。我不想给你这样的印象,“我总是在弄脏手之前先寻求帮助”。在我得到任何有用的建议之前,我实际上是自己解决了这个问题,你可以通过查看我的GitHub commit history 来确认。我以为会更复杂。下次我会更加谨慎。
-
别担心,一切都好。