进度条在 ifort 中不会连续写入,而在 gfortran 中则不会连续写入
我用 Fortran 编写了一个遗传算法,能够以长双精度计算通用适应度函数。第一个版本(双精度)是为 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
我使用 64 位 Intel Xeon,ifort 的选项是:
ifort -O2 -assume bscc FFevalLD.f90 func.o -o FFevalLD
而当使用 gfortran 时,我以这种方式编译:
gfortran -ffree-form -O2 -fbackslash FFeval.f func.o -o FFeval
在 gfortran(但双精度)中一切正常。
I have wrote a genetic algorithm in Fortran to be able to compute with a long double precision a generic fitness function. The first version (double precision) was written for gfortran where I implemented a progress bar.
Now I have to compile with ifort because gfortran is not capable of performing real*16
calculations. All works fine but in this case (ifort) the progress bar does not work properly. Namely, only when the whole cycle is completed the progress bar is printed to std output.
Here is the piece of code for the progress bar:
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
I use an Intel Xeon of 64bit and the options for ifort are:
ifort -O2 -assume bscc FFevalLD.f90 func.o -o FFevalLD
while when use gfortran I compile in this way:
gfortran -ffree-form -O2 -fbackslash FFeval.f func.o -o FFeval
in gfortran (but double precision) all works fine.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个解决方案:
Here's a solution: