Fortran Coder

标题: gfortran函数内联 [打印本页]

作者: build_flower    时间: 2019-4-17 10:02
标题: gfortran函数内联
求助各位大神,fortran里边怎么指定函数内联,以及如何确定它确实被内联了?我用的编译器是gfortran

作者: li913    时间: 2019-4-17 15:28
语法里没有 inline,需要在编译时指定相关参数。具体你查一下gfortran的帮助。
作者: weixing1531    时间: 2019-4-18 13:28
f2008标准中submodule可以实现类似内联功能
作者: fcode    时间: 2019-4-23 08:01
submodule 和内敛有啥关系?
作者: liudy02    时间: 2019-4-23 10:25
fcode 发表于 2019-4-23 08:01
submodule 和内敛有啥关系?

作为一个编程外行,我倒一直有个事情好奇
如果不传大型矩阵的值的话,内联能提高多少效率呢,调用函数开销会很大吗?
我记得好些编程教材都教导读者,放心大胆用函数,函数调用开销基本可以忽略
这样考虑的话,内联存在的意义是啥……
作者: fcode    时间: 2019-4-23 12:39
基本可以忽略,重点在基本上。
函数调用开销大概有4、5个CPU指令那么多,主要在堆栈指针的整理和局部变量堆栈的腾出。
也取决于参数个数(参数个数越多,开销越大)、函数调用协定(C协定较省、而stdcall之类的稍微多1、2个指令)

如果一次函数调用,内联能提高的效率可以忽略不计。
但如果是很多次的调用,比如对一个大数组的每个元素进行的函数调用。用 elemental 或 inline,提升的效率就比较可观了。
作者: liudy02    时间: 2019-4-25 11:26
fcode 发表于 2019-4-23 12:39
基本可以忽略,重点在基本上。
函数调用开销大概有4、5个CPU指令那么多,主要在堆栈指针的整理和局部变量堆 ...

原来如此,非常感谢版主的回答




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2