gpt4 book ai didi

performance - Julia:快速文件动态写入

转载 作者:行者123 更新时间:2023-12-02 07:31:59 26 4
gpt4 key购买 nike

我正在编写一个求解器,它需要在每个时间步写入几个数字到文件中。时间步长必须很小,因此我需要经常写入输出..

This picture shows the code profiling 。正如您所看到的,突出显示的 IO 部分占据了执行时间的显着部分。

IO 的完成方式如下

println(out_file, t, " ", v.P[1], " ", v.P[end])

我想在数据结构v内保存向量P的第一个和最后一个元素以及t的值.

从分析看来,大部分计算时间都是由 string.jl 函数占用的(这不是我定义的)。

这让我想知道是否有更有效的方法将输出迭代写入文件。

有什么建议吗?

谢谢

其他信息

输出文件在执行开始时打开一次,并保持打开状态直到结束。我无法报告整个代码,因为它很长,但它是这样的

out_file = open("file.out", "w")

delta_t = computeDeltaT()
t = 0
while t<T
P = computeP()

println(out_file, t, " ", P[1], " ", P[end])

delta_t = computeDeltaT()
t += delta_t
end

close(out_file)

我需要迭代地编写,因为解决方案会随着时间的推移而发展,我不知道 delta_t 会如何变化。所以我无法预先分配 P。而且,这将是一个巨大的矩阵,大约是数百万乘以 5。

编辑

@isebarn 通过每 100 步打印一次确实减少了执行时间。另外,我将尝试添加第二个工作人员来处理 IO,这样我就不会丢失数据。

最佳答案

迭代是指另一个应用程序/程序必须能够在写入之间读取该文件吗?否则,您可以只打开一次流,然后在最后关闭。

f = open(outfile,"w") # do this once
for i in someloop
# do something
write(f, "whatever") # write to stream but not flushed to disk
end
close(f) # now everything is flushed to the disk (i.e. now outfile will have changed)

如果您需要在过程中访问文件,那么您可以在每次迭代期间打开/关闭(也许 write 比 println 更快,对其进行分析以检查),或者您可以每 N 次迭代打开/关闭流以平衡两个?

编辑:来源: http://docs.julialang.org/en/release-0.4/manual/networking-and-streams/

就像 @isebarn 所说,将二进制写入 hdf5 也可能会更快。但不确定。

此外,IO 通常也是此类场景中的限制因素。另一件要尝试的事情是,是否有一种方法可以估计 P,您可以预先分配然后修剪它?

关于performance - Julia:快速文件动态写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39249754/

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