gpt4 book ai didi

fortran - Fortran 代码的 gprof 输出中的 _IO_wfile 是什么?

转载 作者:行者123 更新时间:2023-12-02 18:41:03 27 4
gpt4 key购买 nike

我有一些使用 intel fortran 编译器 ifort 编译的 fortran 代码。当我使用 gprof 进行配置文件测试时,我发现大部分时间都用于 IO 操作,我想找到文件的末尾,但我找不到更多关于此的文档:

index % time    self  children    called     name
<spontaneous>
[1] 20.6 0.07 0.00 _IO_wfile_seekoff [1]
-----------------------------------------------
<spontaneous>
[2] 20.6 0.07 0.00 sforcepf_ [2]
-----------------------------------------------
<spontaneous>
[3] 20.6 0.02 0.05 _IO_wfile_underflow [3]
0.01 0.04 258716/258717 strncmp [4]
-----------------------------------------------
0.00 0.00 1/258717 _IO_wdefault_doallocate [15]
0.01 0.04 258716/258717 _IO_wfile_underflow [3]
[4] 14.7 0.01 0.04 258717 strncmp [4]
0.04 0.00 3104592/3109256 strerror_r [5]
-----------------------------------------------
0.00 0.00 4664/3109256 __strcmp_sse42 [14]
0.04 0.00 3104592/3109256 strncmp [4]
[5] 11.8 0.04 0.00 3109256 strerror_r [5]
-----------------------------------------------

那么,问题是,这个 IO 是特定于 Linux、ifort 或 fortran 的吗?我正在尝试优化此代码,但在 google 中没有找到有关此术语的有用信息。

最佳答案

您编写 Fortran 语句。英特尔 Fortran 编译器将这些语句转换为汇编程序,包括对系统函数的调用。例如,strncmp 是一个用于比较字符串部分的 ISO C 标准函数。因此,看起来您正在编写 Fortran 语句来比较字符串,而英特尔 Fortran 编译器正在调用现有函数来实现比较。其中一些系统功能本身将通过调用平台上提供的更基本的功能来实现(部分)。

gprof 正在向您显示对其在编译产品中找到的函数的调用。您看到的大部分内容都是特定于 Linux I/O 的——在 Windows 计算机上,I/O 将使用具有不同名称的类似函数。您看到的某些内容可能是特定于英特尔编译器的,所有英特尔编译器都使用相同的(英特尔创建的)函数来执行某些操作,并且该函数使用特定于平台的较低级别函数。

除非您准备重写这些低级函数,并冒着将它们搞砸给使用相同函数的其他程序的风险,否则您唯一可以做的优化就是减少调用它们的频率。例如,如果您有理由认为读取超出文件末尾是一项昂贵的 I/O 操作,并且如果您的程序策略是读取文件直到读取超出末尾,然后处理出现的错误,那么您可能想要实现更好的计划策略。这比重写处理策略结果的低级 I/O 例程更容易。

关于fortran - Fortran 代码的 gprof 输出中的 _IO_wfile 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com