Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29062 Discussions

I/O performance when transfer data through pipe with ifx on Linux

Jun_CN
Beginner
295 Views

Hi there,

I work in the field of geophysics, mainly dealing with seismic data processing.

Seismic data processing involves multiple steps, and I need to transmit the results of each operation. Open-source projects like "Seismic Unix" and "Madagascar" use pipes for this purpose, but they are both written in C.

I rewrote some C code for a processing module in Fortran with ifx, but I found that ifx is extremely slow when transmitting data through pipes, while gfortran does not have this issue.

I wrote a small piece of code for testing, as shown below.

main1.f90

 

integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
a = 1
print*, a
end

 

main2.f90

 

integer,allocatable:: a(:,:,:)
allocate(a(100,1024,1024))
read*, a
print*, a(100,100,100)
end

 

ifx main1.f90 -o main1
ifx main2.f90 -o main2
./main1 | ./main2

For 400MB of data, gfortran took about 10 seconds, while ifx took an astonishing 12 minutes.

What could be the reason for this, and is there any way to improve the I/O performance?

0 Kudos
0 Replies
Reply