关于openmp对vector的支持是否存在有关问题?
关于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下还可以
------解决方案--------------------
方法不对,已经解决。谢谢关注
------解决方案--------------------
。。。没有问题了么,
怎么搞定的
------解决方案--------------------
学习中,谢谢版主
------解决方案--------------------
我去掉内部的那个循环,只在定义一个变量
------解决方案--------------------
解决了就好,支持下
------解决方案--------------------
好铁需要人气!加油
------解决方案--------------------
很有道理值得学习
------解决方案--------------------
出来逛逛 学习学习
------解决方案--------------------
牛人没我帅 帅的没我牛 呵呵
------解决方案--------------------
楼主怎么解决的?我也遇到这个问题了。方便共享一下吗?
有一个问题一直困扰我,我采用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下还可以
------解决方案--------------------
方法不对,已经解决。谢谢关注
------解决方案--------------------
。。。没有问题了么,
怎么搞定的
------解决方案--------------------
学习中,谢谢版主
------解决方案--------------------
我去掉内部的那个循环,只在定义一个变量
------解决方案--------------------
解决了就好,支持下
------解决方案--------------------
好铁需要人气!加油
------解决方案--------------------
很有道理值得学习
------解决方案--------------------
出来逛逛 学习学习
------解决方案--------------------
牛人没我帅 帅的没我牛 呵呵
------解决方案--------------------
楼主怎么解决的?我也遇到这个问题了。方便共享一下吗?