关于openmp对vector的支持是否存在问题??
有一个问题一直困扰我,我采用openmp对vector进行并行运算,但发现运行时间比原来的慢了将近5倍,有时是10倍,我对openmp中可能涉及到的负载平衡进行调试,结果一样.不知道是不是openmp对vector不支持,还是程序修改有问题,请各位专家指导,小弟不尽感谢。
另外针对vector 的操作openmp是否有更好的解决方法????????
具体代码如下,我用的是ms+双核机器,两段程序vc2005编译都没问题。
没有采用openmp之前的部分代码:
QueryPerformanceCounter((LARGE_INTEGER *)&start);
for(vector<m_class *>::iterator i=m_list.begin();i=!m_list.end();i++)
{
for(vector<m_class *>::iterator j=i+1;j!=m_vDefectList.end();j++)
{
//一系列处理
}
}
QueryPerformanceCounter((LARGE_INTEGER *)&finish); //counter
int time=finish-start;
修改后的,用了openmp后的程序:
vector<m_class *>::iterator i = m_list.begin();
QueryPerformanceCounter((LARGE_INTEGER *)&start);
#pragma omp parallel for
for(int tempN=0; tempN<m_vDefectList.size() ; tempN++)
{
for(vector<m_class *>::iterator j=i+tempN+1;j!=m_vDefectList.end();j++)
{
//一系列处理
}
}
QueryPerformanceCounter((LARGE_INTEGER *)&finish); //counter
int time=finish-start;
非常感谢。
[解决办法]
我也怀疑有问题
在循环里如果要改变vector的内容 似乎是不行的
[解决办法]
是的,有的文章说是可以。
我去掉内部的那个循环,只在定义一个变量,
改为:
vector <m_class *>::iterator i = m_list.begin();
QueryPerformanceCounter((LARGE_INTEGER *)&start);
#pragma omp parallel for
for(int tempN=0; tempN <m_list.size() ; tempN++)
{
vector <m_class *>::iterator j;
}
QueryPerformanceCounter((LARGE_INTEGER *)&finish); //counter
int time=finish-start;
同等条件的非openmp程序慢了将近10倍,不知道什么原因?头痛啊!
[解决办法]
多原因是由于debug 造成的,debug下奇慢,release下还可以
[解决办法]
方法不对,已经解决。谢谢关注
[解决办法]
。。。没有问题了么,
怎么搞定的
[解决办法]
学习中,谢谢版主
[解决办法]
我去掉内部的那个循环,只在定义一个变量
[解决办法]
解决了就好,支持下
[解决办法]
好铁需要人气!加油
[解决办法]
很有道理值得学习
[解决办法]
出来逛逛 学习学习
[解决办法]
牛人没我帅 帅的没我牛 呵呵
[解决办法]
楼主怎么解决的?我也遇到这个问题了。方便共享一下吗?