社区
英特尔边缘计算技术
帖子详情
关于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不是很了解
...全文
902
14
打赏
收藏
关于intel 和 vs 两个编译器,对OpenMp的效率
如果我只是要使用openmp ,哪么采用这两种编译器生成的程序,在效率上有什么差别么,那个更好些?比较vs 08 sp1 和 intel 的10.1.022 另外intel的编译器除了根据cpu对编译做了优化,还有其他的方面优化么,是否还支持其他的功能 还有个 intel 推的 thread block 和omp 可以同时用么他们是什么关系 对thread block不是很了解
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++
编译器
(
Intel
C++ Compiler)和
OpenMP
4.5库来实现一个并行的“稳定”三向快速排序算法。三向快速排序是一种优化的快速排序版本,特别适用于处理包含大量重复元素的数据...
和英特尔® Parallel Amplifier有关的
编译器
设置
- `/Qtcheck` 和 `/Qtprofile`:这
两个
选项可能会导致性能分析出现显著差异,因此不建议在使用英特尔 Parallel Amplifier 时启用它们。 - `/Q
openmp
_stubs`:此设置会阻止
OpenMP
* 代码的实际并行化,因此在性能分析...
Intel
®
编译器
10.x版本优化快速参考指南
这
两个
线程工具都可以处理二进制替换和覆盖插入(binary instrumentation)。使用
Intel
编译器
进行源代码替换和覆盖插入将获得更加完整的源代码信息。 总结 通过遵循本指南,您可以快速优化应用程序的性能,提高...
并行程序,跨平台,
OpenMp
,使用方法
- **
Intel
的C/C++
编译器
**: 可以通过在编译命令行中添加参数`/Q
openmp
`(Windows下)或`-
openmp
`(Linux下)来启用
OpenMP
支持。 #### 五、
OpenMP
编程模型 ##### 2.1
OpenMP
指令和库函数介绍
OpenMP
提供了一系列...
OpenMP
OpenMP
OpenMP
OpenMP
主要基于
两个
核心概念:**并行区域(Parallel Regions)**和**任务(Tasks)**。并行区域是通过在源代码中插入`#pragma omp parallel`指令来定义的,这指示
编译器
将该代码块并行执行。在并行区域内,可以使用`...
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章