build_flower 发表于 2019-4-17 10:02:15

gfortran函数内联

求助各位大神,fortran里边怎么指定函数内联,以及如何确定它确实被内联了?我用的编译器是gfortran

li913 发表于 2019-4-17 15:28:50

语法里没有 inline,需要在编译时指定相关参数。具体你查一下gfortran的帮助。

weixing1531 发表于 2019-4-18 13:28:12

f2008标准中submodule可以实现类似内联功能

fcode 发表于 2019-4-23 08:01:44

submodule 和内敛有啥关系?

liudy02 发表于 2019-4-23 10:25:06

fcode 发表于 2019-4-23 08:01
submodule 和内敛有啥关系?

作为一个编程外行,我倒一直有个事情好奇
如果不传大型矩阵的值的话,内联能提高多少效率呢,调用函数开销会很大吗?
我记得好些编程教材都教导读者,放心大胆用函数,函数调用开销基本可以忽略
这样考虑的话,内联存在的意义是啥……

fcode 发表于 2019-4-23 12:39:53

基本可以忽略,重点在基本上。
函数调用开销大概有4、5个CPU指令那么多,主要在堆栈指针的整理和局部变量堆栈的腾出。
也取决于参数个数(参数个数越多,开销越大)、函数调用协定(C协定较省、而stdcall之类的稍微多1、2个指令)

如果一次函数调用,内联能提高的效率可以忽略不计。
但如果是很多次的调用,比如对一个大数组的每个元素进行的函数调用。用 elemental 或 inline,提升的效率就比较可观了。

liudy02 发表于 2019-4-25 11:26:17

fcode 发表于 2019-4-23 12:39
基本可以忽略,重点在基本上。
函数调用开销大概有4、5个CPU指令那么多,主要在堆栈指针的整理和局部变量堆 ...

原来如此,非常感谢版主的回答
页: [1]
查看完整版本: gfortran函数内联