博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个使用Intel® Parallel Studio优化Minibench的例子
阅读量:5101 次
发布时间:2019-06-13

本文共 1605 字,大约阅读时间需要 5 分钟。

COSBI OpenSourceMark是清晰的,全面的开放源码的基准,含Windows*的图形用户界面框架,许多测试是在Delphi中写于2005年,但现在大部分测试支持Visual Studio* C和C + + 。开发者可以从 下载miniBench_v1.0 for Visual Studio* 2005 (cosbi.zip) 

如果你的开发环境是Visual Studio* 2008,把miniBench.sln转换为支持的格式并不太困难。

 

miniBench 包含了很多测试子集,如FFT,Fibonacci,Flops,Linpack,等。使用”minBench.exe –help” 可以看到所有子集的列表。 这里,仅对Linpack子集的代码进行分析,以期抛砖引玉之意。 

使用Intel® Parallel Amplifier () 可以知道cLinpack::daxpy() 占用了很多时间,而且代码是串行的。

 

Figure-1

 

 深入调查代码行的性能数据,可知循环体的代码可以被串行化。

 

 Figure-2

 

 

 先记录一下优化前的数据,

 MiniBench.exe Linpack

……

=====================================

Total elapsed time: 157.17 s.

CLOCKS_PER_SEC: 1000

miniBench benchmark completed.

 

在源代码前加入OpenMP的代码,使之并行化。(我使用的是Intel® Core™ i7 处理器,4个核带超线程)

 

 if( mRolling == eRolled )

 {

omp_set_num_threads(8);

#pragma omp parallel for schedule(static, 4)

        for (i = 0;i < n; i++)

        {

                dy[i] = dy[i] + da*dx[i];

        }

 } else

 {

        m = n % 4;

        if ( m != 0)

        {

                for (i = 0; i < m; i++)

                        dy[i] = dy[i] + da*dx[i];                       

                if (n < 4) return;

        }

#pragma omp parallel for schedule(static, 4)

        for (i = m; i < n; i++ /*i = i + 4*/)

        {

                dy[i] = dy[i] + da*dx[i];

//                dy[i+1] = dy[i+1] + da*dx[i+1];

//                dy[i+2] = dy[i+2] + da*dx[i+2];

//                dy[i+3] = dy[i+3] + da*dx[i+3];

//                

        }

 } // if

 

在编译之前,需加入”OpenMP Support” 在C/C++ - "Language"

 

Figure-3

 

 

 

还需要加上编译器的开关”/Qopenmp-report2” (我使用的是Intel(R) Parallel Composer)

Figure-4

 

  

这样你就可以看到并行化是否成功了。

Fiugure-5

 

 

 

最后重新运行程序,比较结果。有些提高,但是有限-可能是每次函数调用,循环的次数只有”99”

 

MiniBench.exe Linpack

……

=====================================

Total elapsed time: 152.47 s.

CLOCKS_PER_SEC: 1000 

miniBench benchmark completed.

 

有兴趣的同仁可以按照以上方法,修改其它的测试子集。

转载于:https://www.cnblogs.com/shihao/archive/2011/10/20/2219118.html

你可能感兴趣的文章
ajax成功后XML 解析错误:格式不佳
查看>>
反射ModelToDto
查看>>
Win10提示没有权限使用网络资源问题解决
查看>>
初步打开MVC大门
查看>>
二十三、oracle pl/sql分类三 包
查看>>
dubbo 配置文件详解
查看>>
创建Docker私有仓库
查看>>
前端开发利器 - WebStorm
查看>>
[原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解...
查看>>
上传图片并实现本地预览(1)
查看>>
C# 下载
查看>>
windows 系统新建 vue 项目的坑
查看>>
c#线程1
查看>>
使用docker部署skywalking
查看>>
如何设计自动化测试的代码结构
查看>>
样本打散后计算单特征 NDCG
查看>>
el表达式
查看>>
453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
查看>>
过年要回家,随手写了个12306买票的脚本,成功抢到几张卧铺.
查看>>
Linux关机命令详解
查看>>