Fortran Coder

查看: 14625|回复: 6

[求助] gfortran函数内联

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
10 元
贡献
4 点
发表于 2019-4-17 10:02:15 | 显示全部楼层 |阅读模式
求助各位大神,fortran里边怎么指定函数内联,以及如何确定它确实被内联了?我用的编译器是gfortran

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2019-4-17 15:28:50 | 显示全部楼层
语法里没有 inline,需要在编译时指定相关参数。具体你查一下gfortran的帮助。

125

帖子

34

主题

1

精华

大师

F 币
1129 元
贡献
587 点
发表于 2019-4-18 13:28:12 | 显示全部楼层
f2008标准中submodule可以实现类似内联功能

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2019-4-23 08:01:44 | 显示全部楼层
submodule 和内敛有啥关系?

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
发表于 2019-4-23 10:25:06 | 显示全部楼层
fcode 发表于 2019-4-23 08:01
submodule 和内敛有啥关系?

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

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

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

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

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
发表于 2019-4-25 11:26:17 | 显示全部楼层
fcode 发表于 2019-4-23 12:39
基本可以忽略,重点在基本上。
函数调用开销大概有4、5个CPU指令那么多,主要在堆栈指针的整理和局部变量堆 ...

原来如此,非常感谢版主的回答
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 03:33

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表