首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

关于openmp对vector的支持是否存在有关问题?

2012-12-14 
关于openmp对vector的支持是否存在问题??有一个问题一直困扰我,我采用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下还可以
[解决办法]
方法不对,已经解决。谢谢关注
[解决办法]
。。。没有问题了么,

怎么搞定的
[解决办法]
学习中,谢谢版主
[解决办法]
我去掉内部的那个循环,只在定义一个变量
[解决办法]
解决了就好,支持下
[解决办法]
好铁需要人气!加油
[解决办法]
很有道理值得学习
[解决办法]
出来逛逛 学习学习
[解决办法]
牛人没我帅   帅的没我牛   呵呵
[解决办法]
楼主怎么解决的?我也遇到这个问题了。方便共享一下吗?

热点排行