Fortran Coder

查看: 405|回复: 3
打印 上一主题 下一主题

[输入输出] intel fortran管道传输问题

[复制链接]

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
跳转到指定楼层
楼主
发表于 2024-10-10 20:32:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 愤怒的三炮 于 2024-10-10 20:39 编辑

平常在地震数据处理的时候,经常会把程序拆分成几个模块,第一个模块处理完,将数据通过管道传递给第二个模块接着处理。

开源的SU软件也是这么做的,但它是用C写的。我用Fortran自己实现了某些处理,然后也用管道的方式进行数据传递,发现intel fortran传递奇慢。

下面是一个小测试:
main1.f90
[Fortran] 纯文本查看 复制代码
integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
a = 1
print*, a
end

main2.f90
[Fortran] 纯文本查看 复制代码
integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
read*, a
print*, a(100,100,100)
end


[Bash shell] 纯文本查看 复制代码
ifort main1.f90 -o main1
ifort main2.f90 -o main2
./main1 | ./main2


400M的数据,gfortran只用了 10s 就传递完成了,且输出正确;但 intel fortran 却足足用了12分钟。

我想可能是跟 io buffering 有关,但我打开了 intel fortran 的 io buffer 选项后,依旧是如此。

请问这是什么原因呢?

ifort version 19.1.3.304
gcc version 7.5.0
Ubuntu 18.04
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2024-10-11 11:48:18 | 只看该作者
这个问题可能没法解决,编译器的事情。可以重定向到文件,而不是用管道,我在wsl测试了,gf 用时20s,ifort用时30s。

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
板凳
 楼主| 发表于 2024-10-11 14:52:58 | 只看该作者
li913 发表于 2024-10-11 11:48
这个问题可能没法解决,编译器的事情。可以重定向到文件,而不是用管道,我在wsl测试了,gf 用时20s,ifort ...

我确实没注意到是编译器版本的问题,因为我之前用了intel parallel studio 2020和最新版的Oneapi,在WSL2、Ubuntu18.04和Ubuntu22.04上都试了一下,只在Ubuntu 18.04的测试中计时了,其它的都没等到它执行结束(但intel肯定都是超过五分钟的)。

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
地板
 楼主| 发表于 2024-10-12 10:38:43 | 只看该作者
如果有人出现了类似的问题,欢迎讨论。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-23 07:56

Powered by Tencent X3.4

© 2013-2024 Tencent

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