【问题标题】:How to find the source code of intrinsic functions - gfortran如何找到内在函数的源代码 - gfortran
【发布时间】:2021-09-28 12:59:15
【问题描述】:

您好,我正在为我的项目使用 gfortran,我的教授告诉我要了解位操作函数代码/它们的工作原理。
这些是我已经采取但失败的步骤:

  1. 我试图找到存储所有函数的内部函数文件。即使我确实设法找到了该文件,但它似乎没有帮助,因为该文件只有函数的名称和变量类型。(我将在下面附上内在函数填充)。

  2. 我尝试在 google 中搜索,但我只得到函数的作用,而不是源代码。

谁能指出我在哪里可以找到这些函数的源代码? 主要是我需要位操作函数。

操作系统:Windows
IDE:代码块
编译器:GNU 编译器
This fortran file is inside codeblocks folder

【问题讨论】:

  • 欢迎,请在本站转tour

标签: function fortran procedure gfortran


【解决方案1】:

内在函数是在编译器内部实现的函数。有些在运行时库(例如,libgfortran)中,因此您可以找到它们的一些源代码,有些可能实际上根本不作为函数存在,编译器将在此类函数的位置插入一些(汇编,机器)代码被调用。

内部函数通常不在 Fortran 中实现,而是在 C 或 C++ 等系统编程语言中实现。有些人最终会为特定的 CPU 架构调用用汇编语言编写的代码。许多人会调用标准 C 库中的函数,例如GLIBC 实现。

理论上有些可以用 Fortran 编写,有些则不能(例如,具有不确定数量参数的函数,如 min 或类型转换函数,如 transfer)。许多使用仅对编译器可用的内部信息(例如数组描述符或多态对象描述符的内容)。

如果您有兴趣,当然可以搜索这些函数在开源编译器中是如何实现的,例如在 libgfortran https://github.com/gcc-mirror/gcc/tree/master/libgfortran 中,但对于在 Fortran 中编程来说,这绝对不是必需的。

只需从the standard documentscompiler manuals 或参考教科书中了解它们的描述即可。


具体到位操作函数:

上面链接的手册中对它们进行了很好的描述,教科书中将提供示例。

如果您想查看实际的机器代码,可以尝试编译一个调用此类函数的简单代码,例如在像https://godbolt.org/z/7Yq6acrYr这样的在线编译器中

如您所见,编译器最终将对 ishft 的调用转换为机器代码,包括 x86-64 sal 指令。没有调用外部函数。


请注意,文件fortran_procedures.f90 只是由某人提供供您参考,其中包含您可以在标准文档或手册中找到的信息。不是可以编译的Fortran源代码。

【讨论】:

  • 好的,谢谢!我会和我的教授确认一下。并会检查你给我的链接。
  • @JulianSamuel 是的,和你的教授谈谈,他们可能只是想让你了解如何使用这些函数。我仍然建议在此站点周围使用tour,它与您可能熟悉的许多其他站点的工作方式不同。
  • 当然!感谢您的回复。
  • 您还可以使用转储 Fortran 代码的各种中间表示的不同选项编译示例代码。 -fdump-tree-original-fdump-tree-optimized 是我使用的两个。如果您想要所有转储,请使用-fdump-tree-all
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2012-01-26
  • 2020-07-03
  • 1970-01-01
相关资源
最近更新 更多