对于VTune性能分析 以及Thread Profiler的疑问?

jeedispeed 2009-01-23 02:03:25

double Pi()
{
int i;
long num_steps = 40000000;
double x, pi, step, sum = 0.0;
step = 1.0 / (double) num_steps;
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for reduction(+:sum) private(x)
for (i = 0; i < num_steps; ++ i)
{
x = (i - 0.5) * step;
sum += 4.0 / (1.0 + x * x);

}
pi = step*sum;
return pi;
}

void fun2()
{
double sum;
sum=Pi();
std::cout<<"result is :"<<sum<<std::endl;
}
int main(int argc, char** argv)
{
clock_t t1=clock();
fun2();
clock_t t2=clock();
std::cout<<"time: "<<difftime(t2,t1)<<std::endl;
//system("pause");
}


代码是照着书抄的。
对于上述代码应用Intel Thread Profiler分析,结果程序完全串行执行,另外一个线程一直阻塞,我的机器酷睿双核的。
但是上面的时间测试却呈现了另一个结果:
使用OpenMP时间消耗大概300~400ms
如果//#pragma omp parallel for reduction(+:sum) private(x) 即把编译器指令注释
时间大概变为两倍(700~800ms)
这似乎与VTune的分析有异!
...全文
693 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaya__ 2009-10-10
  • 打赏
  • 举报
回复
学习
intel_zhenyuwang 2009-04-20
  • 打赏
  • 举报
回复
我用的是Intel(R) Compiler 11, 含编译开关 "/Zi", "/MDd", "/Qopenmp_profile", 含链接开关 "/DEBUG", "/Fixed:no"

运行Thread Profiler后,应该看到三线程在Timeline:
1) Thread #1 (主线程)
2) _kmp_launch_monitor
3) OMP Worker Thread #1
liqiang_8612 2009-04-17
  • 打赏
  • 举报
回复
为什么我用thread profiler测的timeline总是一个进程从头到尾都是串行(桔黄色的线),而另一个进程并行开销完了之后就是wait(浅绿色的线)?负载严重不平衡,利用了schedule子句也无济于事,请大虾指教
aaaa3105563 2009-03-14
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
学习学习
yellowhwb 2009-02-03
  • 打赏
  • 举报
回复
mark
qmxlizr 2009-02-03
  • 打赏
  • 举报
回复
ok
intel_zhenyuwang 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 intel_zhenyuwang 的回复:]
请看我的新贴- http://topic.csdn.net/u/20090124/18/806def5a-f534-46f7-a057-0dbfbf2520cc.html
结果是一致的.
[/Quote]请大家顶一下这个帖,答案在这里.
deluoba06 2009-02-03
  • 打赏
  • 举报
回复
up up up
bestboy1 2009-02-02
  • 打赏
  • 举报
回复
顶起来。
梅文海 2009-02-02
  • 打赏
  • 举报
回复
这个话题值得关注
chenyingshu 2009-02-02
  • 打赏
  • 举报
回复
帮顶
fxhhnhj 2009-02-02
  • 打赏
  • 举报
回复
招聘启示
本公司是一家大型的信息专业网站,公司09年为了开拓全国业务需要,现急需招聘具备良好的团队合作精神,责任感强,善于沟通,能够承受压力的程序员3-5名,职位要求如下:

(一)Delphi程序员
1、三年以上Delphi开发经验,精通Delphi+SQL Server编程, 熟悉SQ LServer数据库;
2、从事过行业管理信息系统开发全过程,具有一定的软件工程思想;
3、有电子商务、国际货运代理、仓储、物流EDICRM软件开发经验优。
(二)C#程序员
1.二年以上C#软件研发工作经验;
2.有软件体系结构设计经验,有很强的C#编码技能;
3.精通XML、MSDTC、COM+/COM、Web Services和.net framework;
4.熟练掌握Oracle、SQL Server等大型数据库系统,熟悉数据库设计、调优及SQL存储过程的编写。
(三)网站设计程序员
1. 美术、计算机二年以上工作经验;
2. 熟悉SQL数据,精通ASP.NET编程进行后台的开发,有一定的编辑经验,能够独立完成项目方案的设计;
3. 精通网页设计和平面设计的相关软件,如Dreamweaver、Photoshop、Flash、Coredraw等 ;
4.文字功底好,有丰富的想象策划能力,能独立完成大型网站的建设需求/策划方案。

工作地点:河南 工作方式:全职

福利待遇:面议(不会低于你的期望值)

联系方式:冯先生 13603728111
zgb915 2009-02-02
  • 打赏
  • 举报
回复
学习
cadhy 2009-02-01
  • 打赏
  • 举报
回复

学习
intel_zhenyuwang 2009-01-24
  • 打赏
  • 举报
回复
请看我的新贴- http://topic.csdn.net/u/20090124/18/806def5a-f534-46f7-a057-0dbfbf2520cc.html
结果是一致的.
jstar920 2009-01-23
  • 打赏
  • 举报
回复
不懂,学习中,帮顶
xiaoyisnail 2009-01-23
  • 打赏
  • 举报
回复
帮顶~
jeedispeed 2009-01-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 intel_iclifort 的回复:]
没看到ITP具体的图,无法给出解释。

你算的时间只是fun2()的时间,而VTune/ITP给出的是整个程序运行的时间

我猜想这个例子中计算的时间是相当少的(可以大概估算一下,用总的计算次数除以CPU的频率),大部分的时间是花在归约操作上,以及线程的创建和销毁上



[/Quote]

CSDN上面似乎不能贴图 我用VTune分析,图中显示thread0完全串行,thread1完全阻塞 按照这样的分析性能应该是很差劲的,但是程序实际的结果是要比串行版本(注释掉#pragma)快约50%,所以对于这个VTune图的有效性产生怀疑。
intel_iclifort 2009-01-23
  • 打赏
  • 举报
回复
另外输入输出,IO这些操作都是串行的 :)
加载更多回复(2)
Intel.Thread.Profiler.英特尔_.线程档案器11

Intel.Thread.Profiler.英特尔_.线程档案器].Intel.Thread.Profiler.v3.1.005.ISO-TBE.part11.rar

因为文件很大~ 所以分开压缩了 解压后是镜像

概述

立刻采用多线程技术,释放多核处理器(包括最新的 64 位四核处理器)系统的卓越性能

英特尔® 线程档案器 3.1 Windows* 版有助于您调整并提高多线程应用程序的运行速度,从而使代码在英特尔® 多核处理器上的性能得到优化。

英特尔® 线程档案器可作为独立产品获得。更加完整的性能调试解决方案随 VTune性能分析器 Windows 版提供。

特性

虚拟化线程应用程序行为:

●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。
●在调用堆栈和源代码中准确定位引发性能问题的确切位置,从而对分析发挥辅助作用。
●测量应用有效利用的内核数量,确定实际的并行处理性能

英特尔® 线程档案器 3.1 Windows 版同时显示并发视图和时间轴视图,这有助于查看哪部分代码适合并行处理以及应用性能问题源于何处。在图 1 中,对源代码进行了两次修复,每次修复后性能持续提高,通过应用运行时间缩短可以看出这一点。通过英特尔® 线程档案器,开发人员能够在应用中充分利用多核技术。

通过双击时间轴视图上的转换进入源代码视图,从而准确查看线程在源代码中进行转换工作的位置

发现并行性能问题:

●发现影响性能的线程和同步对象
●查看线程任务分配,准确定位负载失衡

高级线程性能分析功能:

●通过 OpenMP* 分析,可以快速确定原型,并估计不同设计的性能潜力
●使用关键路径分析有助于将精力集中于比较重要的性能问题上

Microsoft Visual Studio* 2005 支持:

●支持 Microsoft Visual Studio* 2005 中使用 Microsoft Windows 编译器开发的 C++ 应用程序

本版本新增内容

支持最新多核处理器:

●优化新的英特尔® 酷睿™2 双核处理器以及英特尔® 酷睿™2 四核处理器上的多线程应用程序的性能

在 Microsoft Windows Vista* 上安装并运行:

分析在 Microsoft Windows Vista* 上运行的已编译 32 和 64 位应用程序

兼容性

英特尔线程档案器 3.0 Windows 版兼容现今的行业标准开发工具:

Microsoft Visual Studio* 2005
Microsoft Visual C++* 编译器 2005、2003、2002 版或 Visual C++ 6.0
Microsoft Visual Studio 2005 Express Edition C++ 编译器
英特尔® VTune性能分析器 8.0 或更高版本
英特尔® Fortran 和 C++ 编译器
Windows 线程和 POSIX* 线程
英特尔® 线程构建模块
支持英特尔® OpenMP*
Intel.Thread.Profiler.Intel.Thread.Profiler.英特尔_.线程档案器9


因为文件很大~ 所以分开压缩了 解压后是镜像

概述

立刻采用多线程技术,释放多核处理器(包括最新的 64 位四核处理器)系统的卓越性能

英特尔® 线程档案器 3.1 Windows* 版有助于您调整并提高多线程应用程序的运行速度,从而使代码在英特尔® 多核处理器上的性能得到优化。

英特尔® 线程档案器可作为独立产品获得。更加完整的性能调试解决方案随 VTune性能分析器 Windows 版提供。

特性

虚拟化线程应用程序行为:

●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。
●在调用堆栈和源代码中准确定位引发性能问题的确切位置,从而对分析发挥辅助作用。
●测量应用有效利用的内核数量,确定实际的并行处理性能

英特尔® 线程档案器 3.1 Windows 版同时显示并发视图和时间轴视图,这有助于查看哪部分代码适合并行处理以及应用性能问题源于何处。在图 1 中,对源代码进行了两次修复,每次修复后性能持续提高,通过应用运行时间缩短可以看出这一点。通过英特尔® 线程档案器,开发人员能够在应用中充分利用多核技术。

通过双击时间轴视图上的转换进入源代码视图,从而准确查看线程在源代码中进行转换工作的位置

发现并行性能问题:

●发现影响性能的线程和同步对象
●查看线程任务分配,准确定位负载失衡

高级线程性能分析功能:

●通过 OpenMP* 分析,可以快速确定原型,并估计不同设计的性能潜力
●使用关键路径分析有助于将精力集中于比较重要的性能问题上

Microsoft Visual Studio* 2005 支持:

●支持 Microsoft Visual Studio* 2005 中使用 Microsoft Windows 编译器开发的 C++ 应用程序

本版本新增内容

支持最新多核处理器:

●优化新的英特尔® 酷睿™2 双核处理器以及英特尔® 酷睿™2 四核处理器上的多线程应用程序的性能

在 Microsoft Windows Vista* 上安装并运行:

分析在 Microsoft Windows Vista* 上运行的已编译 32 和 64 位应用程序

兼容性

英特尔线程档案器 3.0 Windows 版兼容现今的行业标准开发工具:

Microsoft Visual Studio* 2005
Microsoft Visual C++* 编译器 2005、2003、2002 版或 Visual C++ 6.0
Microsoft Visual Studio 2005 Express Edition C++ 编译器
英特尔® VTune性能分析器 8.0 或更高版本
英特尔® Fortran 和 C++ 编译器
Windows 线程和 POSIX* 线程
英特尔® 线程构建模块
支持英特尔® OpenMP*
英特尔_.线程档案器6
Intel.Thread.Profiler.英特尔_.线程档案器7


因为文件很大~ 所以分开压缩了 解压后是镜像

概述

立刻采用多线程技术,释放多核处理器(包括最新的 64 位四核处理器)系统的卓越性能

英特尔® 线程档案器 3.1 Windows* 版有助于您调整并提高多线程应用程序的运行速度,从而使代码在英特尔® 多核处理器上的性能得到优化。

英特尔® 线程档案器可作为独立产品获得。更加完整的性能调试解决方案随 VTune性能分析器 Windows 版提供。

特性

虚拟化线程应用程序行为:

●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。
●在调用堆栈和源代码中准确定位引发性能问题的确切位置,从而对分析发挥辅助作用。
●测量应用有效利用的内核数量,确定实际的并行处理性能

英特尔® 线程档案器 3.1 Windows 版同时显示并发视图和时间轴视图,这有助于查看哪部分代码适合并行处理以及应用性能问题源于何处。在图 1 中,对源代码进行了两次修复,每次修复后性能持续提高,通过应用运行时间缩短可以看出这一点。通过英特尔® 线程档案器,开发人员能够在应用中充分利用多核技术。

通过双击时间轴视图上的转换进入源代码视图,从而准确查看线程在源代码中进行转换工作的位置

发现并行性能问题:

●发现影响性能的线程和同步对象
●查看线程任务分配,准确定位负载失衡

高级线程性能分析功能:

●通过 OpenMP* 分析,可以快速确定原型,并估计不同设计的性能潜力
●使用关键路径分析有助于将精力集中于比较重要的性能问题上

Microsoft Visual Studio* 2005 支持:

●支持 Microsoft Visual Studio* 2005 中使用 Microsoft Windows 编译器开发的 C++ 应用程序

本版本新增内容

支持最新多核处理器:

●优化新的英特尔® 酷睿™2 双核处理器以及英特尔® 酷睿™2 四核处理器上的多线程应用程序的性能

在 Microsoft Windows Vista* 上安装并运行:

分析在 Microsoft Windows Vista* 上运行的已编译 32 和 64 位应用程序

兼容性

英特尔线程档案器 3.0 Windows 版兼容现今的行业标准开发工具:

Microsoft Visual Studio* 2005
Microsoft Visual C++* 编译器 2005、2003、2002 版或 Visual C++ 6.0
Microsoft Visual Studio 2005 Express Edition C++ 编译器
英特尔® VTune性能分析器 8.0 或更高版本
英特尔® Fortran 和 C++ 编译器
Windows 线程和 POSIX* 线程
英特尔® 线程构建模块
支持英特尔® OpenMP*

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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