Индикатор выполнения не записывается непрерывно в ifort, пока он находится в gfortran - PullRequest
1 голос
/ 11 мая 2011

Я написал генетический алгоритм на Фортране, чтобы можно было с большой двойной точностью вычислять универсальную фитнес-функцию. Первая версия (двойная точность) была написана для 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 (но с двойной точностью) все отлично работает.

1 Ответ

1 голос
/ 02 сентября 2011

Вот решение:

if (rate(i).gt.ratemax) then 
  ratemax=rate(i)
  1100 format(1x,A57,D12.4,A27,f6.2,A1,$) 
  write(*,1100) &
  '\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$ ratemax,' Progress:',100.*real(nmix)/real(nmixing),'%' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...