OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。 在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。 先看一个简单的使用了OpenMP程序

创新互联公司是一家业务范围包括IDC托管业务,网络空间、主机租用、主机托管,四川、重庆、广东电信服务器租用,资阳托管服务器,成都网通服务器托管,成都服务器租用,业务范围遍及中国大陆、港澳台以及欧美等多个国家及地区的互联网数据服务公司。
- int main(int argc, char* argv[])
 - {
 - #pragma omp parallel for
 - for (int i = 0; i < 10; i++ )
 - {
 - printf("i = %d/n", i);
 - }
 - return 0;
 - }
 - 这个程序执行后打印出以下结果:
 - i = 0
 - i = 5
 - i = 1
 - i = 6
 - i = 2
 - i = 7
 - i = 3
 - i = 8
 - i = 4
 - i = 9
 
 可见for 循环语句中的内容被并行执行了。(每次运行的打印结果可能会有区别) 这里要说明一下,
#pragma
 omp parallel for 
这条语句是用来指定后面的for循环语句变成并行执行的,当然for循环里的内容必须满足可以并行执行,即每次循环互不相干,后一次循环不依赖于前面的循环。  
有关#pragma omp parallel for 这条语句的具体含义及相关OpenMP指令和函数的介绍暂时先放一放,只要知道这条语句会将后面的for循环里的内容变成并行执行就行了。  
 
将for循环里的语句变成并行执行后效率会不会提高呢,我想这是我们最关心的内容了。下面就写一个简单的测试程序来测试一下: 
- 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 main(int argc, char* 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();
 - return 0;
 - }
 - 在test()函数中,执行了1亿次循环,主要是用来执行一个长时间的操作。
 - 在main()函数里,先在一个循环里调用test()函数,只循环2次,我们还是看一下在双核CPU上的运行结果吧:
 - Time = 297
 - Time = 297
 - Total time = 297
 - Time = 297
 
可以看到在for循环里的两次test()函数调用都花费了297ms, 但是打印出的总时间却只花费了297ms,后面那个单独执行的test()函数花费的时间也是297ms,可见使用并行计算后效率提高了整整一倍。
下一篇文章中将介绍OpenMP的具体指令和用法。
原文链接:http://blog.csdn.net/drzhouweiming/article/details/1131537
                文章题目:OpenMP并行程序设计(一)
                
                新闻来源:http://www.csdahua.cn/qtweb/news3/280953.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网