gpt4 book ai didi

linux - 如何避免程序处于状态 D

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:02 25 4
gpt4 key购买 nike

我写了一个读写数据的程序(打开一个infile和一个outfile,读取一部分infile,然后处理,然后写入outfile,如此循环),I/O值大约200M/s in全部的。然而,大部分运行时间,它们都处于状态D,这意味着等待I/O(如图)1 .我使用 dd 检查我系统中的写入速度,大约是 1.8G/s。

enter image description here

我的程序效率低下吗?还是我的硬盘有问题?我该如何处理?

最佳答案

如果使用 ifort,您必须明确使用缓冲 I/O。编译时用-assume buffered_io标记或在open语句中设置buffered='yes'

如果您使用的是 gfortran,这是默认设置,那么肯定还有其他问题。

编辑

我可以补充一点,根据您读取和写入数据的方式,大部分时间可以花在解析它上,即解码 ascii 字符 123 等并将基数从 10 更改为 2 直到它是机器可读数据;然后在写作时做相反的事情。如果您像这样构建代码,就会出现这种情况:

real :: vector1(10)

do
read(5,*) vector1 !line has 10 values
write(6,*) vector1
enddo

如果您改为执行以下操作,速度会快得多:

character(1000) :: line1 ! use enough characters so the whole line fits

do
read(5,'(A)') line1
write(6,'(A)') line1
enddo

现在您只是通过程序输入 ascii,甚至不知道它的数字是“ääåö(=)&/&%/(¤%/&Rhgksbks---31)”。通过这些修改,我认为您应该达到磁盘速度的最大值。

另请注意,大多数驱动器中都有一个写缓存,它比磁盘读/写速度更快,这意味着您可能首先被读取速度限制,并且在填满写缓存后,被限制写入速度,通常低于读取速度。

关于linux - 如何避免程序处于状态 D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com