社区
英特尔边缘计算技术
帖子详情
关于intel 和 vs 两个编译器,对OpenMp的效率
youxia000
2008-08-22 09:58:00
如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022
另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能
还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系
对thread block不是很了解
...全文
886
14
打赏
收藏
关于intel 和 vs 两个编译器,对OpenMp的效率
如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022 另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能 还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系 对thread block不是很了解
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
intel_iclifort
2008-09-03
打赏
举报
回复
[Quote=引用 11 楼 youxia000 的回复:]
用了几天感觉,intel的编译是要慢一点,不过在同使用omp的情况下还是intel的好,如果没有用omp,intel的好的就更明显了
我想可能是 向量化的好处吧,在问问 如果单核上 向量化还能有这么明显么,他是否也利用了多核来做单线程的程序
[/Quote]
我前面提到过,向量化是CPU指令级别的优化,只要使用的处理器(核)支持相应的SIMD指令,就会有非常好的效果的。这种类型的优化,和你的系统中有几个核,几个处理器无关的。
而OpenMP可以看成是线程级别的优化,即你原先的代码可能是串行的(或者单线程的),通过很少的改动,不用考虑线程创建维护的细节,就被编译器自动生成多个线程并发执行了。这样运行在多处理器(核)的系统上,性能就会对应的提升(当然不是线性的),在单核上运行也完全没有问题。
各种优化功能组合起来使用,不一定是 1+1>2。可能需要通过多次试验,找到最适合你应用的那几个。
youxia000
2008-09-03
打赏
举报
回复
哦,虽然不是一个层上的优化
但还是都要最终的影响性能的,
ollydbg23
2008-08-30
打赏
举报
回复
呵呵,这个我也很有兴趣想了解一下,大侠们讲解一下。。。
youxia000
2008-08-29
打赏
举报
回复
多谢,找到了chm的文档和 例子了
之前都没注意,呵呵
用了几天感觉,intel的编译是要慢一点,不过在同使用omp的情况下还是intel的好,如果没有用omp,intel的好的就更明显了
我想可能是 向量化的好处吧,在问问 如果单核上 向量化还能有这么明显么,他是否也利用了多核来做单线程的程序
ps:intel公司不限制上网么,你们是领导要求的来回答问题,还是个人行为,4个三角要多少分啊
intel_iclifort
2008-08-29
打赏
举报
回复
[Quote=引用 9 楼 speme 的回复:]
不过,用intel的编译器会不在AMD的机子上运行比较慢?
[/Quote]
您试过拿相同的代码,用不同厂家的最新版本编译器(Microsoft,Intel,PGI...),在AMD的机子上生成可执行程序,谁的性能最好吗?
好像还是用Intel的编译器更快些,呵呵。 前提是你要用对,用好编译器的优化选项
intel_iclifort
2008-08-28
打赏
举报
回复
[Quote=引用 2 楼 youxia000 的回复:]
而使用omp后,他们的相差不是很大了包含上随机的误差,他俩在我的测试例子上大概10%的相差,没明显看出那个更好,不过你说不用考虑他们之间的选择那就好了,起码选择时候省事了,我想统一后的还是能包含向量化这个技术吧
[/Quote]
向量化是针对指令级的优化,而OpenMP是线程级的优化,两者可以同时进行
要注意到,线程本身的创建和维护也是有开销的,还可能引入负载不均衡等性能问题,这些可能会部分抵消其它的优化效果
speme
2008-08-28
打赏
举报
回复
不过,用intel的编译器会不在AMD的机子上运行比较慢?
intel_iclifort
2008-08-28
打赏
举报
回复
[Quote=引用 7 楼 ollydbg23 的回复:]
我怀疑您是否就是intel公司的员工,主要负责在csdn答疑解惑?
[/Quote]
呵呵,看来我们的ID还不够明显。看看这里
http://subject.csdn.net/IntelMulti-core/
,你就全明白了。
很高兴能在CSDN中的“英特尔多核软件开发”子论坛中,和大家一起交流和分享。
欢迎您也多多参与,发些帖子提问也好,回答更好。我们会不定期地举办“最有技术价值的发帖”的评选活动。
ollydbg23
2008-08-28
打赏
举报
回复
[Quote=引用 6 楼 intel_iclifort 的回复:]
补充说明一下,采用OpenMP的代码,也同样是与操作系统和硬件平台无关的。因为如何创建,维护和销毁线程的工作,完全是由编译器自动完成的. 这样就可以保证了代码的跨平台,可移植. 线程的数量, 缺省等于系统中的CPU或者核(Core)的总数
[/Quote]
谢谢,你回答的如此详细和热情。
我怀疑您是否就是intel公司的员工,主要负责在csdn答疑解惑?
intel_iclifort
2008-08-28
打赏
举报
回复
补充说明一下,采用
OpenMP
的代码,也同样是与操作系统和硬件平台无关的。因为如何创建,维护和销毁线程的工作,完全是由编译器自动完成的. 这样就可以保证了代码的跨平台,可移植. 线程的数量, 缺省等于系统中的CPU或者核(Core)的总数
intel_iclifort
2008-08-28
打赏
举报
回复
[Quote=引用 4 楼 ollydbg23 的回复:]
在intel compiler 的CHM文档里面,对于编译器可以做何等优化,的确写得非常详细,楼主可以仔细看看,而且它还提供了测试的一些代码。
[/Quote]
是的,如果愿意读一读Intel编译器的联机文档,会发现其中提供了很多优化的方法和建议。 另外,在V10.0以后的版本,安装目录下还提供了很多sample code
另外,如果还知道如何生成和阅读Intel编译器的优化报告,然后对代码进行适当的改动,往往能使性能大幅提高
[Quote=引用 4 楼 ollydbg23 的回复:]
另外一个问题,我个人感觉,就是intel编译器的编译速度比较慢(我用的是9.1的编译器,环境是VC6)
[/Quote]
呵呵,你提到的不是一个新问题。 原因在于,Intel编译器采用了相当多的优化算法,编译时间会有所增加。从v8.x, v9.x 到目前的v10.x,一直都在努力做到提高性能的同时,尽量不增加编译时间,但难度很大。 另外一个是,生成的可执行程序的体积也会变大,好在目前看来硬盘空间不是成为很大的问题。
此外,当您的代码还在开发和调试的阶段,尚未成型,有些比较耗时的高级优化功能(如IPO,PGO等)并不建议使用。
ollydbg23
2008-08-28
打赏
举报
回复
回答的真不错,受益匪浅。
在intel compiler 的CHM文档里面,对于编译器可以做何等优化,的确写得非常详细,楼主可以仔细看看,而且它还提供了测试的一些代码。
另外一个问题,我个人感觉,就是intel编译器的编译速度比较慢(我用的是9.1的编译器,环境是VC6)
youxia000
2008-08-26
打赏
举报
回复
非常感谢如此详细的回答,测试了下,单线程就是不用omp的时候 intel 的远大于 MS的,这个就是你说的向量化了
而使用omp后,他们的相差不是很大了包含上随机的误差,他俩在我的测试例子上大概10%的相差,没明显看出那个更好,不过你说不用考虑他们之间的选择那就好了,起码选择时候省事了,我想统一后的还是能包含向量化这个技术吧
那个文章看了下,目前没有移植,跨平台需求,omp简单,够用,
intel_iclifort
2008-08-25
打赏
举报
回复
[Quote=引用楼主 youxia000 的帖子:]
如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022
[/Quote]
在Windows操作系统上,ICC很早以前的版本就已经支持OpenMP了,而VC++是从2005版本才开始的。性能上的差别,很容易自己比较得出。来回转换使用VC++的Project,或者Intel C++的Project,不受任何限制。命令行上就更简单了。 另外,可能在不远的将来,开发人员不需要考虑如何在两个 OpenMP RTL 之间选择了。原因暂时保密,请原谅。
[Quote=引用楼主 youxia000 的帖子:]
另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能
[/Quote]
Intel编译器对特定CPU的优化,通常我们称作“向量化”,其实就是尽可能多得采用处理器支持的SIMD指令。其它方面的优化,其实联机帮助手册中,已经有很详细的说明,比如对循环的优化,IPO优化,PGO优化,等等。。。
[Quote=引用楼主 youxia000 的帖子:]
还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系
对thread block不是很了解
[/Quote]
论坛置顶的文章中,有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类的方法来实现,这样就能保证代码的跨平台,可移植性。
如何使用英特尔C ++
编译器
和
OpenMP
4.5库实现并行的“稳定”三向快速排序
我将讨论如何使用英特尔C ++
编译器
和
OpenMP
4.5库提供现代代码,该库基于上一篇文章中已讨论的并行代码来实现并行的“稳定”三向快速排序。
和英特尔® Parallel Amplifier有关的
编译器
设置
英特尔® Parallel Amplifier 能够分析二进制代码。然而,如果在编译您的程序时,能正确和适当的设置
编译器
选项可以使分析更容易。
Intel
®
编译器
10.x版本优化快速参考指南
在开始性能调试之前,您可以使用/Od(-00),即在不进行优化的情况下构建应用程序,以检查它的准确性。
并行程序,跨平台,
OpenMp
,使用方法
并行程序,跨平台,
OpenMp
,使用方法
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
英特尔边缘计算技术
567
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章