[求助!!]我的OpenMP程序好像并没有并发运行...

silverbullettt 2011-05-19 11:43:43
我今天写了两个程序,代码都源自周伟明老师的《多核计算与程序设计》
但是从运行结果看似乎并没有并发运行

第一段程序

int main(int argc, _TCHAR* argv[]) {
#pragma omp parallel for
for (int i = 0; i < 20; ++i) {
printf("i=%d\n", i);
}
printf("Finished\n");
return 0;
}


这是非常简单的并行程序,但是我没次运行结果都是顺序的打印0到19,而不是交错打印


第二段程序

#include <ctime>
using namespace std;

int main() {
CRITICAL_SECTION cs;
int i;
clock_t t1, t2;
InitializeCriticalSection(&cs);
t1 = clock();
for (i = 0; i < 10000000; ++i) {
EnterCriticalSection(&cs);
LeaveCriticalSection(&cs);
}
t2 = clock();
printf("One task, enter and leave critical section 10000000 times, time = %1dms\n", t2 - t1);

t1 = clock();
#pragma omp parallel for num_threads(2)
for (i = 0; i < 10000000; ++i) {
EnterCriticalSection(&cs);
LeaveCriticalSection(&cs);
}
t2 = clock();
printf("Two task, enter and leave critical section 10000000 times, time = %1dms\n", t2 - t1);
DeleteCriticalSection(&cs);

return 0;
}



第二次循环是并行加锁的程序,运行速度应该比第一次循环慢得多,但是我每次运行,结果都显示两次循环消耗的时间几乎一样

我的电脑CPU是Intel Core(TM) 2 Duo T6500
操作系统是windows 7
编译器是Visual C++ 2010 Express

编译程序的时候打开了openmp,但是从这两个程序的运行结果看似乎没有并行的运行
请问VC编译OpenMP还有什么注意事项我遗漏了吗?求助。。。
...全文
215 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_银月游侠_ 2011-06-16
  • 打赏
  • 举报
回复
呵呵,对于持续运行的程序还可以看看CPU占用率。
intel_iclifort 2011-06-09
  • 打赏
  • 举报
回复
另外,编译时也需要激活openmp选项的,否则编译器就会被直接忽略的

上面打印当前OMP的线程数也是一个直观的办法。
silverbullettt 2011-06-08
  • 打赏
  • 举报
回复
我知道了。。我的是VC是express版本的,没有带OMP,所以编译出来的就是串行程序。
我换成ultimate版就行了
bloublou 2011-05-25
  • 打赏
  • 举报
回复
用omp_get_thread_num()查到线程号,
打印一下
蚂蚁上树 2011-05-20
  • 打赏
  • 举报
回复

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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