首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于intel 和 vs 两个编译器,对OpenMp的效率 [已结贴,结贴人:youxia000]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youxia000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-22 09:58:00 楼主
    如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022

    另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能

    还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系

    对thread block不是很了解
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-25 11:12:031楼 得分:50
    引用楼主 youxia000 的帖子:
    如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022


    在Windows操作系统上,ICC很早以前的版本就已经支持OpenMP了,而VC++是从2005版本才开始的。性能上的差别,很容易自己比较得出。来回转换使用VC++的Project,或者Intel C++的Project,不受任何限制。命令行上就更简单了。  另外,可能在不远的将来,开发人员不需要考虑如何在两个 OpenMP RTL 之间选择了。原因暂时保密,请原谅。

    引用楼主 youxia000 的帖子:
    另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能

    Intel编译器对特定CPU的优化,通常我们称作“向量化”,其实就是尽可能多得采用处理器支持的SIMD指令。其它方面的优化,其实联机帮助手册中,已经有很详细的说明,比如对循环的优化,IPO优化,PGO优化,等等。。。


    引用楼主 youxia000 的帖子:
    还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系

    对thread block不是很了解

    论坛置顶的文章中,有Intel软件工具的技术文章,可以找到介绍TBB (Thread Building Block)的文章 http://topic.csdn.net/u/20080328/10/6ba0957d-3c5d-4fda-ae86-2b92c2a0e62f.html

    简单的说,实现多线程化的方式,采用在程序代码中插入OpenMP原语(#pragma omp xxxx)的方式,是比较简单,渐进,同时和操作系统无关。所有的工作都是由编译器自动完成的。当然它对原有串行代码的改动量比较小,如果原来的算法支持数据并行,那么OpenMP比较合适

    而TBB可以理解为提供了多线程化方法的C++类,它隐藏了不同操作系统之间thread实现的底层API和调用机制。多线程开发是通过调用TBB类的方法来实现,这样就能保证代码的跨平台,可移植性。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youxia000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-26 09:10:432楼 得分:0
    非常感谢如此详细的回答,测试了下,单线程就是不用omp的时候 intel 的远大于 MS的,这个就是你说的向量化了

    而使用omp后,他们的相差不是很大了包含上随机的误差,他俩在我的测试例子上大概10%的相差,没明显看出那个更好,不过你说不用考虑他们之间的选择那就好了,起码选择时候省事了,我想统一后的还是能包含向量化这个技术吧

    那个文章看了下,目前没有移植,跨平台需求,omp简单,够用,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 12:48:453楼 得分:0
    引用 2 楼 youxia000 的回复:
    而使用omp后,他们的相差不是很大了包含上随机的误差,他俩在我的测试例子上大概10%的相差,没明显看出那个更好,不过你说不用考虑他们之间的选择那就好了,起码选择时候省事了,我想统一后的还是能包含向量化这个技术吧


    向量化是针对指令级的优化,而OpenMP是线程级的优化,两者可以同时进行

    要注意到,线程本身的创建和维护也是有开销的,还可能引入负载不均衡等性能问题,这些可能会部分抵消其它的优化效果

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ollydbg23
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 13:25:594楼 得分:0
    回答的真不错,受益匪浅。
    在intel compiler 的CHM文档里面,对于编译器可以做何等优化,的确写得非常详细,楼主可以仔细看看,而且它还提供了测试的一些代码。

    另外一个问题,我个人感觉,就是intel编译器的编译速度比较慢(我用的是9.1的编译器,环境是VC6)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 14:44:075楼 得分:0
    引用 4 楼 ollydbg23 的回复:
    在intel compiler 的CHM文档里面,对于编译器可以做何等优化,的确写得非常详细,楼主可以仔细看看,而且它还提供了测试的一些代码。


    是的,如果愿意读一读Intel编译器的联机文档,会发现其中提供了很多优化的方法和建议。 另外,在V10.0以后的版本,安装目录下还提供了很多sample code

    另外,如果还知道如何生成和阅读Intel编译器的优化报告,然后对代码进行适当的改动,往往能使性能大幅提高

    引用 4 楼 ollydbg23 的回复:
    另外一个问题,我个人感觉,就是intel编译器的编译速度比较慢(我用的是9.1的编译器,环境是VC6)


    呵呵,你提到的不是一个新问题。 原因在于,Intel编译器采用了相当多的优化算法,编译时间会有所增加。从v8.x, v9.x 到目前的v10.x,一直都在努力做到提高性能的同时,尽量不增加编译时间,但难度很大。 另外一个是,生成的可执行程序的体积也会变大,好在目前看来硬盘空间不是成为很大的问题。

    此外,当您的代码还在开发和调试的阶段,尚未成型,有些比较耗时的高级优化功能(如IPO,PGO等)并不建议使用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 15:01:196楼 得分:0

    补充说明一下,采用OpenMP的代码,也同样是与操作系统和硬件平台无关的。因为如何创建,维护和销毁线程的工作,完全是由编译器自动完成的. 这样就可以保证了代码的跨平台,可移植.  线程的数量, 缺省等于系统中的CPU或者核(Core)的总数


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ollydbg23
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 15:11:537楼 得分:0
    引用 6 楼 intel_iclifort 的回复:

    补充说明一下,采用OpenMP的代码,也同样是与操作系统和硬件平台无关的。因为如何创建,维护和销毁线程的工作,完全是由编译器自动完成的. 这样就可以保证了代码的跨平台,可移植.  线程的数量, 缺省等于系统中的CPU或者核(Core)的总数

    谢谢,你回答的如此详细和热情。
    我怀疑您是否就是intel公司的员工,主要负责在csdn答疑解惑?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 15:44:058楼 得分:0
    引用 7 楼 ollydbg23 的回复:
    我怀疑您是否就是intel公司的员工,主要负责在csdn答疑解惑?


    呵呵,看来我们的ID还不够明显。看看这里 http://subject.csdn.net/IntelMulti-core/,你就全明白了。

    很高兴能在CSDN中的“英特尔多核软件开发”子论坛中,和大家一起交流和分享。 

    欢迎您也多多参与,发些帖子提问也好,回答更好。我们会不定期地举办“最有技术价值的发帖”的评选活动。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • speme
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 21:50:059楼 得分:0
    不过,用intel的编译器会不在AMD的机子上运行比较慢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-29 10:29:1610楼 得分:0
    引用 9 楼 speme 的回复:
    不过,用intel的编译器会不在AMD的机子上运行比较慢?


    您试过拿相同的代码,用不同厂家的最新版本编译器(Microsoft,Intel,PGI...),在AMD的机子上生成可执行程序,谁的性能最好吗?

    好像还是用Intel的编译器更快些,呵呵。 前提是你要用对,用好编译器的优化选项

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youxia000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-29 11:19:0711楼 得分:0
    多谢,找到了chm的文档和 例子了

    之前都没注意,呵呵

    用了几天感觉,intel的编译是要慢一点,不过在同使用omp的情况下还是intel的好,如果没有用omp,intel的好的就更明显了
    我想可能是 向量化的好处吧,在问问 如果单核上 向量化还能有这么明显么,他是否也利用了多核来做单线程的程序

    ps:intel公司不限制上网么,你们是领导要求的来回答问题,还是个人行为,4个三角要多少分啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ollydbg23
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-30 20:59:0612楼 得分:0
    呵呵,这个我也很有兴趣想了解一下,大侠们讲解一下。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • intel_iclifort
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-09-03 11:29:1413楼 得分:0
    引用 11 楼 youxia000 的回复:
    用了几天感觉,intel的编译是要慢一点,不过在同使用omp的情况下还是intel的好,如果没有用omp,intel的好的就更明显了
    我想可能是 向量化的好处吧,在问问 如果单核上 向量化还能有这么明显么,他是否也利用了多核来做单线程的程序


    我前面提到过,向量化是CPU指令级别的优化,只要使用的处理器(核)支持相应的SIMD指令,就会有非常好的效果的。这种类型的优化,和你的系统中有几个核,几个处理器无关的。

    而OpenMP可以看成是线程级别的优化,即你原先的代码可能是串行的(或者单线程的),通过很少的改动,不用考虑线程创建维护的细节,就被编译器自动生成多个线程并发执行了。这样运行在多处理器(核)的系统上,性能就会对应的提升(当然不是线性的),在单核上运行也完全没有问题。

    各种优化功能组合起来使用,不一定是 1+1>2。可能需要通过多次试验,找到最适合你应用的那几个。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youxia000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-09-03 16:40:3314楼 得分:0
    哦,虽然不是一个层上的优化

    但还是都要最终的影响性能的,
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved