Here is a test program. On Windows 10, with an Intel i7-10710U CPU, the program runs in 1.4 s with Intel Fortran OneAPI, and in 27 s with Gfortran 10.2 (Cygwin).
program IntlWrite
implicit none
character(120) :: str
integer :: i,j
double precision :: x(10) = (/ 7.569d-1, 5.556d-1, -1.640d-1, 9.362d-1, 1.057d-1, &
-2.385d-1, -9.541d-1, 1.449d-1, -7.885d-1, -1.108d-1 /)
Integer, parameter :: tkind = selected_int_kind(15)
Integer(tkind) :: tcnt1, tcnt2, trate
call system_clock(tcnt1,trate)
do j=1, 1000000
write (str,'(1P,10ES11.3)') x
if (mod(j,200000).eq.0) write (*,'(1x,I7,2x,A)') j, str
end do
call system_clock(tcnt2)
print '(1x,A,2x,F6.3,A)','Time used (System_Clock) : ', &
real(tcnt2-tcnt1)/trate,' sec'
end program
See also the GCC-libFortran bug report that JohnCampbell alluded to. That report was filed in November 2016, and the issue was closed in June 2018.