使用omp并行后更慢了……

xiaolinxianju 2010-09-19 11:21:54
#include "stdafx.h"
#include <ctime>

void test()
{
int a = 0;
clock_t t1 = clock();

for (int i=0; i<100000000; ++i)
{
a = i + 1;
}
clock_t t2 = clock();

printf("time = %d\n", t2 - t1);
}

int _tmain(int argc, _TCHAR* argv[])
{
clock_t t1 = clock();

#pragma omp parallel for
for(int j=0; j<2; ++j)
{
test();
}

clock_t t2 = clock();

printf("total time = %d\n", t2 - t1);

test();

getchar();
return 0;
}


运行时间:
time = 702
time = 718
total time = 1420
time = 702

这是怎么回事呀?我已经在项目属性里的C++栏-语言中选择支持omp并行了。但是好像根本没有实现并行的效果。麻烦高手指点一二。我刚学习并行。
...全文
1010 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolinxianju 2010-10-01
  • 打赏
  • 举报
回复
自己up^
xiaolinxianju 2010-09-28
  • 打赏
  • 举报
回复
怎么没人帮忙……自己顶上去……
FancyMouse 2010-09-26
  • 打赏
  • 举报
回复
把编译器和编译命令拿出来
xiaolinxianju 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guanxinquan 的回复:]
你开启omp执行的时候设置线程池的数目设置没有?当然,在默认情况下,omp会根据cpu的实际内核数创建线程池。openmp实际上有两种编写方式,一种是引用库,就是要加#include<omp.h>那个,然后用库函数,另一种就是使用宏的方式,就是你使用的这种方式,在使用宏方式时,如果编译器不认识,默认会忽略,就是把他当做空格看。
[/Quote]

我觉得默认情况下,应该是可以的吧。我的事四核的CPU,而且通过输出的结果来看,的确是用了四个核来分别输出的。


下面是我的测试代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

#pragma omp parallel for
for (int i=0; i<10; ++i)
{
printf("i = %d\n", i);
}
system("pause");

return 0;
}



这是不用并行情况下输出的结果:
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
请按任意键继续. . .

这是开了并行情况下的结果:
i = 6
i = 7
i = 0
i = 1
i = 2
i = 8
i = 9
i = 3
i = 4
i = 5
请按任意键继续. . .
xiaolinxianju 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fancymouse 的回复:]
把编译器和编译命令拿出来
[/Quote]

楼上高人是什么意思?呵呵,没看懂。新手,请见谅!
xiaolinxianju 2010-09-25
  • 打赏
  • 举报
回复
自己顶……
guanxinquan 2010-09-25
  • 打赏
  • 举报
回复
你开启omp执行的时候设置线程池的数目设置没有?当然,在默认情况下,omp会根据cpu的实际内核数创建线程池。openmp实际上有两种编写方式,一种是引用库,就是要加#include<omp.h>那个,然后用库函数,另一种就是使用宏的方式,就是你使用的这种方式,在使用宏方式时,如果编译器不认识,默认会忽略,就是把他当做空格看。
xiaolinxianju 2010-09-21
  • 打赏
  • 举报
回复
等待中……
xiaolinxianju 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fanster28_ 的回复:]
你的机子是单核心的
[/Quote]

不是啊,我的机子是四核的
fanster28_ 2010-09-20
  • 打赏
  • 举报
回复
你的机子是单核心的
xiaolinxianju 2010-09-20
  • 打赏
  • 举报
回复
但为什么在你的电脑上运行就可以,而在我的这上面就 不行了呢?
开通并行的设置是不是:项目属性-C/C++-语言—支持omp

我用的vs2008
fanster28_ 2010-09-20
  • 打赏
  • 举报
回复
不一定
xiaolinxianju 2010-09-20
  • 打赏
  • 举报
回复
是不是必须要加#include <omp.h>
这句话?
xiaolinxianju 2010-09-20
  • 打赏
  • 举报
回复
我试过了,还是一样……会不会是设置方面的问题?
fanster28_ 2010-09-20
  • 打赏
  • 举报
回复
你新建一个空的控制台工程试试先
fanster28_ 2010-09-19
  • 打赏
  • 举报
回复
#include <omp.h>

结果正常
time = 300
time = 425
total time = 425
time = 275
xiaolinxianju 2010-09-19
  • 打赏
  • 举报
回复
不加并行的运行时间:
time = 702
time = 702
total time = 1404
time = 702

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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