请教一个vector push_back 与OpenMP的问题。

taseaa 2012-04-28 09:12:33
问题描述:
有一个类:

class fp
{
vector <float> tm;
//初始化里有有多运算;
}

vector<fp> kf;

int i=0;

#pragma omp parallel for
for(i=0;i<t;i++)
{

fk.push_bask(fp);

}

每个FP 的初始完成时间不一至,
每个FP的大小也不一至。
以至 fk.push_bask(fp); 完成的时间也不同。

现在的问题是:
编译运行后,Vector会在一个Parallel周期完成就报告有味定义的异常。
猜想是vector.push_bask()多线程插入引起。
...全文
993 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wei832660 2012-08-23
  • 打赏
  • 举报
回复
而且这个时候的用openmp不一定比for循环快,更何况还会有冲突
zhuxueling 2012-08-04
  • 打赏
  • 举报
回复
感觉这是一个非常2的问题, 没看到并行性就openmp
modyaj 2012-05-04
  • 打赏
  • 举报
回复
lock unlock 都可以加锁的 当然临界区也行
不过我怀疑是vector在第一个线程中push_bask后失效了 而并行的时候其他线程不知道该在什么位置push_bask
bsnry 2012-04-28
  • 打赏
  • 举报
回复
写个临界区类加锁即可解决。 同一个进程类。

#pragma omp parallel for

是什么啊
bsnry 2012-04-28
  • 打赏
  • 举报
回复
#pragma omp parallel for


楼主,这是什么,给个资料看看吧
pengzhixi 2012-04-28
  • 打赏
  • 举报
回复
我不清楚openmp中是怎么加锁的,但是stl中容器的大部分操作是需要加锁的。
taseaa 2012-04-28
  • 打赏
  • 举报
回复

#pragma omp parallel for
for(i=0;i<t;i++)
{
#pragma omp critical
fk.push_bask(fp);
}

是这样加锁是吗?
pengzhixi 2012-04-28
  • 打赏
  • 举报
回复
多线程操作同一个vector没加锁?
nice_cxf 2012-04-28
  • 打赏
  • 举报
回复
多线程插入显然要加锁
taseaa 2012-04-28
  • 打赏
  • 举报
回复
有个地方笔误:

vector<fp> kf;
应为:
vector<fp> fk;
Saleayas 2012-04-28
  • 打赏
  • 举报
回复
为每一个Task 添加一个私有容器。
在for 完成之后,合并这些私有容器。
「已注销」 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
#pragma omp parallel for


楼主,这是什么,给个资料看看吧
[/Quote]
OPENMP, 有线程同步的机制, 具体的忘记了, 两三年前看过。 看看书就明白了。也就是一两句指令的问题。

608

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧