本帖最后由 愤怒的三炮 于 2024-10-10 20:39 编辑  
 
平常在地震数据处理的时候,经常会把程序拆分成几个模块,第一个模块处理完,将数据通过管道传递给第二个模块接着处理。 
 
开源的SU软件也是这么做的,但它是用C写的。我用Fortran自己实现了某些处理,然后也用管道的方式进行数据传递,发现intel fortran传递奇慢。 
 
下面是一个小测试: 
main1.f90 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
a = 1
print*, a
end  
main2.f90 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
read*, a
print*, a(100,100,100)
end  
 
[Bash shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode 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 
 |