Fortran 选择格式以提高代码执行时间

标签 fortran fortran77

我有一个以三个值数组开头的代码,这些值在代码开头初始化。对于不同的运行,我必须进入代码对这些初始值进行显式更改。 由于这非常令人沮丧且耗时,因此我决定修改代码,使代码改为从文本文件读取初始值。

虽然我成功地进行了更改,但现在代码运行速度要慢得多(至少慢了 20 倍)。

当我在代码中显式初始化数组时,数组看起来像这样

数组1 = {0.001,0.002,0.034,...} array2 = {42D4, 36D4, 72D4, 10D5, ...}。

我尝试使用

从文本文件中读取这些数组值

格式(E8.2)或格式(D8.2)或格式(F8.2)。

我猜测我使用这些格式从文件中读取值的方式与代码速度的大幅降低有关?

这是真的吗?如果没有,我需要做什么? 如果是,我应该如何修改格式以使我的代码以与以前相似的速度运行?

最佳答案

很难争论读取是否占用了代码运行时的很大一部分。我们不知道,因为我们看不到代码。但如果是的话:

正如之前多次说过的,文本文件不会获得良好的性能。您设置的读取格式无关紧要,运行时库必须进行大量处理才能将字符串转换为计算机内存中的数字。

显着加快 I/O 操作速度的方法是使用未格式化(二进制)数据文件。

值得注意的是,您尝试过的格式

Format(E8.2)
Format(D8.2)
Format(F8.2)

对于输入来说都是完全等效。不仅仅是他们的速度。它们的含义对于输入来说完全等价。

关于Fortran 选择格式以提高代码执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689797/

相关文章:

fortran - 使用 ifort 构建可执行共享库

fortran - F77 : problem to compile with g77 a program which was normally compiled with Absoft compiler

debugging - 如何避免在 gdb 中重复输入相同的内容?

fortran - Fortran 77 中的 IEEE_UNDERFLOW_FLAG IEEE_DENORMAL

fortran - 向量迭代排序的高效算法

c++ - 如何使用 std::vector 作为参数从 Fortran 77 调用 C++ 函数?

VB.Net:DllImport 和 Declare 语句的差异

c++ - 使用 Visual Studio 2013 和 Intel Fortran 使用 Fortran 编译混合 C++/C 代码

macos - 如何在 Mac OS X 10.6 上安装 f77