注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

小试openMP  

2012-06-02 23:54:17|  分类: 技术类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
因为学校搞神马创新项目,限定每个班级必须至少有6组,所以就很自然的参加了。搞个神马“创新”呢?不想让老师帮忙找题,觉得不靠谱,突然想到以前看过的openMP相关的知识就准备在这方面搞点东西,初步的设想是:
写一个程序:
输入是普通的C/C++代码
输出是经过优化的增加openMP支持的多线程代码(即通过分析代码上下文语义来判断是否可以通过并发实现(主要是循环结构),对于满足条件的代码自动向代码中插入opemMP的预处理命令来让模块具有并行性)
PS.并行:同时运行(多核概念)  并发:同一时间段运行(单核概念) 进程:独立运行的程序实体(资源分配的最小单位) 线程:单一控制顺序流(处理器执行的最小单位,属于同一线程的多个进程共享进程资源)

openMP简介见维基百科 “openMP“词条 : http://zh.wikipedia.org/wiki/OpenMP 

下面是在VS2010上实验openMP并行处理随机数生成的性能对比实验,还是很给力的:
小试openMP - 刘邓 - 刘邓
下面是代码了:

/*
文件名:openMP.cpp
功能:输入产生随机数的个数,然后输出结果openMP优化后的并发执行时间
和未经openMP优化的单线程执行时间。
*/
#include<omp.h> //openMP头文件
#include<iostream> //C++输入输出流头文件
#include<time.h> //时间头文件,用于统计运行时间
#include<cstdlib> //C标准库文件,用户生成随机数
using namespace std;
int main()
{
long count = 0; //用户输入的随机数个数
long i = 0; //循环计数
time_t ot1,ot2; //结果openMP优化循环的前后执行时间
time_t t1,t2; //未经优化的循环前后的执行时间
while(1){
cout<<"请输入生成随机数的个数:";
cin>>count;
ot1 = clock();
#pragma omp parallel for
for(i = 0;i<count;++i)
rand();
ot2 = clock();
cout<<"opemMP生成"<<count<<"个随机数所用时间为:"<<ot2 - ot1<<endl;
t1 = clock();
for(i = 0;i<count;++i)
rand();
t2 = clock();
cout<<"未经优化生成"<<count<<"个随机数所用时间为:"<<t2 - t1<<endl;
}
return 0;
}



 有兴趣的可以自己再找点资料看看,感觉对于提高程序性能还是很有帮助的,这让我们更加专注于问题解决方案的设计(分析哪里可以通过并行提高效率),而不需要特别关注于如何实现。让我们从底层编码中解脱出来。ps。不过据说这个东东不适合非常复杂的并行情况,另openMP主要支持的是多核共享内存的程序设计实现,对于分布式的集群则需要MPI(Message Pass Interface)来实现了,这个东西还么有接触,不过非常感兴趣,以后会慢慢学习滴。

路漫漫其修远兮,吾将上下而求索~小试openMP - 刘邓 - 刘邓
  评论这张
 
阅读(268)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018