Fortran 使用文件与另一个程序通信
Fortran communicating with another program using files
我有一个程序(我们称之为 a.exe),它从文件中读取一些数据,计算一些东西,然后将结果写入另一个文件。
我需要从我自己的 Fortran 代码中调用 a.exe。
我想出了以下解决方案:
- 将 fortran 格式的数据写入磁盘。
- 从 Fortran 调用 a.exe。
- a.exe 现在读取它的输入文件,进行计算并将结果写入文件。
- 用 Fortran 解析 a.exe 的输出。
这在理论上可行,但速度不够快,因为我需要经常调用 a.exe。因此我的程序花太多时间做IO。
所以,如果有人有想法改进我的解决方案,我将不胜感激。
只要 a.exe
仍然是按照您描述的方式运行的单独的可执行文件,就不可能有任何改进。第一次调用后,a.exe
的内容应该缓存在你的内存中,以后的调用不应该再从磁盘读取 a.exe
,直到它被挤出。
只要您使用磁盘进行进程间通信,您在读写您正在处理的文件上花费的时间是不可避免的;这可以通过设置 ram 磁盘 (tmpfs) 来大大加快。
显然,如果您可以重写 a.exe
的代码,可以做更多的事情。如果您可以将它放入一个可以与您的 Fortran 代码链接的目标文件,那将是理想的。如果没有,您可以将它变成一个持久服务器,例如,这样您就可以只 运行 它一次。如果在将数据文件移动到 ramdisk 后你的进程仍然很慢,你可能有其他问题。
我有一个程序(我们称之为 a.exe),它从文件中读取一些数据,计算一些东西,然后将结果写入另一个文件。 我需要从我自己的 Fortran 代码中调用 a.exe。
我想出了以下解决方案:
- 将 fortran 格式的数据写入磁盘。
- 从 Fortran 调用 a.exe。
- a.exe 现在读取它的输入文件,进行计算并将结果写入文件。
- 用 Fortran 解析 a.exe 的输出。
这在理论上可行,但速度不够快,因为我需要经常调用 a.exe。因此我的程序花太多时间做IO。
所以,如果有人有想法改进我的解决方案,我将不胜感激。
只要 a.exe
仍然是按照您描述的方式运行的单独的可执行文件,就不可能有任何改进。第一次调用后,a.exe
的内容应该缓存在你的内存中,以后的调用不应该再从磁盘读取 a.exe
,直到它被挤出。
只要您使用磁盘进行进程间通信,您在读写您正在处理的文件上花费的时间是不可避免的;这可以通过设置 ram 磁盘 (tmpfs) 来大大加快。
显然,如果您可以重写 a.exe
的代码,可以做更多的事情。如果您可以将它放入一个可以与您的 Fortran 代码链接的目标文件,那将是理想的。如果没有,您可以将它变成一个持久服务器,例如,这样您就可以只 运行 它一次。如果在将数据文件移动到 ramdisk 后你的进程仍然很慢,你可能有其他问题。