对于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的分析有异!
...全文
826 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)

65,210

社区成员

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

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