| 查看: 2518 | 回复: 9 | |||
| 本帖产生 1 个 程序强帖 ,点击这里进行查看 | |||
coolrainbow木虫 (著名写手)
未来国家冻凉
|
[交流]
【转帖】intel Fortran编译器的一个“危险”优化已有9人参与
|
||
|
源地址:http://hi.baidu.com/coolrainbow/ ... d6c40c5aaf535e.html 今天无意中发现了intel编译器优化的一个问题。我有一个程序,大致是这样 program main integer, parameter :: n = 1000 real(kind = 8) value(n) integer i call computation(value) do i = 1, n write (*,*) value(n) enddo end 其中computation是一个计算量极大的subroutine。利用intel编译编译,分别令n = 1000和n = 5000,不优化和优化执行的时间 n 1000 5000 O0 12min 60min O2 7min 36min 后来,我无意中将输出函数的代码取消了,也即: program main integer, parameter :: n = 1000 real(kind = 8) value(n) integer i call computation(value) end 再次运行,惊现! n 1000 5000 O0 11min30s 59min O2 0.003s 0.003s 看到这种结果,我目瞪口呆,可是当我发现n=1000和5000是执行时间相同,我就猜测computation这个子过程根本就没有执行。那么为什么没执行呢?我猜测:intel编译器在O2过程中,发现后续代码没有用到value这个数组,也没有牵扯到computation函数内部的任何内容,因此干脆将其优化掉了。 这个猜测对吗?决定看一下。在n=1000时候,我将两段代码编译成汇编语言: ifort -O0 -o pO0.s -S foo.f90 ifort -O2 -o pO2.s -S foo.f90 首先观察pO0.s,发现: # -- Begin MAIN__ ......... call foo_mp_computation_ #369.10 ........ # -- End MAIN__ 果然,main中调用了computation函数。再看pO2.s,我们发现: # -- Begin MAIN__ ........ # -- End MAIN__ 确确实实没有发现computation函数调用的汇编代码,哈哈,看来我的推测是对的。 下面这段比较小的代码,大家可以自己用编译器编译一下,我用ifort编译了一下,和上面是一样的,通过汇编语言可以发现,开启O2时,汇编代码的MAIN中没有出现调用perform函数的内容。当然,如果我说的不对,希望大家指教,呵呵。 subroutine perform(value, n) integer n real(kind = 8) value(n) integer i do i = 1, n value(i) = 2.0*i enddo return end subroutine program main integer, parameter :: n = 10 real(kind = 8) value(n) call perform(value,n) end 事实上,这个例子表明,编译器的优化选项确实有一定的危险性,尽管在这个例子中,并没有什么问题,但是在投产级别的软件中启动优化选项时的确要慎重,一般不要启用O3这种激进的优化,即使启用也一定要试验确定代码无误后才行 |
» 猜你喜欢
申请2026年博士
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有5人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有7人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有5人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有6人回复
2025冷门绝学什么时候出结果
已经有7人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
linux下面如何安装fortran 编译器和编译fortran 程序
已经有8人回复
请热心人能提供一个带imsl库的intel visual fortran编译器下载链接
已经有6人回复
请问安装fortran编译器之前必须先安装visual studio 吗
已经有9人回复
大家都用什么fortran编辑器,推荐一下,最好是能加亮或修改语句颜色的
已经有15人回复
急求可用的fortran编译器
已经有13人回复
求初学者能用的fortran编译器
已经有6人回复
【求助】CUDA支持的Fortran编译器现在只有PGI吗?
已经有5人回复
【求助】FEDORA12下用FORTRAN编写程序需要下一个FORTRAN编译器么
已经有18人回复
【求助】求Fortran90编译器?
已经有11人回复
【求助】求Fortan90或Fortran95编译器,安装PWscf用的。
已经有6人回复
【求助】20金币求VASP编译软件 Fortran编译器和单机安装VASP4.6的过程
已经有4人回复
【求助】win7 的 用什么fortran 编译器啊?【已完成】
已经有14人回复

hakekill
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1709.3
- 帖子: 131
- 在线: 19小时
- 虫号: 246017
- 注册: 2006-04-29
- 性别: GG
- 专业: 水环境与生态水利
2楼2010-09-12 19:06:22
ifmc1234
木虫 (著名写手)
- 应助: 18 (小学生)
- 金币: 2797.9
- 散金: 6001
- 红花: 14
- 帖子: 1761
- 在线: 572.6小时
- 虫号: 825500
- 注册: 2009-08-10
- 专业: 理论和计算化学
3楼2010-09-12 19:21:14
coolrainbow
木虫 (著名写手)
未来国家冻凉
- 程序强帖: 2
- 应助: 1 (幼儿园)
- 贵宾: 0.1
- 金币: 3979.5
- 散金: 10
- 红花: 50
- 帖子: 1137
- 在线: 272.3小时
- 虫号: 239560
- 注册: 2006-04-07
- 性别: GG
- 专业: 理论和计算化学

4楼2010-09-12 21:00:35
maomao1210
金虫 (正式写手)
- 程序强帖: 5
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 散金: 242
- 红花: 16
- 沙发: 1
- 帖子: 991
- 在线: 441.5小时
- 虫号: 253215
- 注册: 2006-05-20
- 性别: MM
- 专业: 考古理论
5楼2010-09-13 09:08:38
tjyl
金虫 (正式写手)
- 程序强帖: 2
- 应助: 0 (幼儿园)
- 金币: 3218.1
- 红花: 2
- 帖子: 576
- 在线: 156.6小时
- 虫号: 765184
- 注册: 2009-05-07
- 专业: 生物无机化学
- 管辖: 程序语言
6楼2010-09-13 13:06:09
weiwei43
至尊木虫 (正式写手)
- 应助: 16 (小学生)
- 金币: 18316.1
- 红花: 6
- 帖子: 737
- 在线: 94.7小时
- 虫号: 250282
- 注册: 2006-05-13
- 专业: 机械动力学
7楼2010-09-26 19:05:38
bulrush2008
木虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 2663.3
- 帖子: 35
- 在线: 19.7小时
- 虫号: 2199521
- 注册: 2012-12-21
- 性别: GG
- 专业: 流体力学

8楼2016-01-21 22:22:59
virtualzx
木虫 (著名写手)
- 应助: 263 (大学生)
- 金币: 7161.3
- 红花: 54
- 帖子: 1605
- 在线: 317.6小时
- 虫号: 2069080
- 注册: 2012-10-18
- 性别: GG
- 专业: 理论和计算化学
★
小木虫: 金币+0.5, 给个红包,谢谢回帖
小木虫: 金币+0.5, 给个红包,谢谢回帖
|
这不是编译器的问题,是你程序本身有bug,而优化引爆了bug。你的问题很可能是变量没初始化,下标越界等。 如果你调用了一个很复杂的函数,但是完全没用到它的输出,也没有改变任何函数外的变量,那说明这个函数本身就是一段垃圾代码,优化就是应该把它拿掉的。这不能叫危险,反倒说明它派上用场了 发自小木虫IOS客户端 |
9楼2016-01-22 04:17:29
10楼2016-01-22 14:15:23













回复此楼
