Я написал генетический алгоритм на Фортране, чтобы можно было с большой двойной точностью вычислять универсальную фитнес-функцию. Первая версия (двойная точность) была написана для gfortran, где я реализовал индикатор выполнения.
Теперь я должен скомпилировать с ifort, потому что gfortran не способен выполнять real*16
вычисления. Все работает нормально, но в этом случае (ifort) индикатор выполнения не работает должным образом. А именно, только когда весь цикл завершен, индикатор выполнения выводится на стандартный вывод.
Вот код для индикатора выполнения:
if (rate(i).gt.ratemax) then
ratemax=rate(i)
write(*,"(1x,A57,D12.4,A27,f6.2,A1)",advance="no") &
'\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ff: ', &
ratemax,' Progress:',100.*real(nmix)/real(nmixing),'%'
end if
Я использую Intel Xeon 64 бит и варианты для ifort:
ifort -O2 -assume bscc FFevalLD.f90 func.o -o FFevalLD
в то время как при использовании gfortran я компилирую таким образом:
gfortran -ffree-form -O2 -fbackslash FFeval.f func.o -o FFeval
в gfortran (но с двойной точностью) все отлично работает.