【发布时间】:2019-09-03 03:00:30
【问题描述】:
我有一个 Julia 代码,版本 1.2,它在 10000 x 10000 Array 上执行大量操作。由于运行代码时出现OutOfMemory() 错误,我正在探索其他选项来运行它,例如内存映射。关于Mmap.mmap 的使用,由于https://docs.julialang.org/en/v1/stdlib/Mmap/index.html 的解释很少,我对映射到磁盘的数组的使用有点困惑。这是我的代码的开头:
using Distances
using LinearAlgebra
using Distributions
using Mmap
data=Float32.(rand(10000,15))
Eucldist=pairwise(Euclidean(),data,dims=1)
D=maximum(Eucldist.^2)
sigma2hat=mean(((Eucldist.^2)./D)[tril!(trues(size((Eucldist.^2)./D)),-1)])
L=exp.(-(Eucldist.^2/D)/(2*sigma2hat))
L 是我想要使用的10000 x 10000 Array,所以我将它映射到我的磁盘
s = open("mmap.bin", "w+")
write(s, size(L,1))
write(s, size(L,2))
write(s, L)
close(s)
在那之后我该怎么办?下一步是执行K=eigen(L) 并将其他命令应用于K。我该怎么做?使用K=eigen(L) 或K=eigen(s)?对象s 的作用是什么,它什么时候参与进来?此外,我不明白为什么我必须使用Mmap.sync! 以及何时使用。在eigen(L) 之后的每一行之后?在代码的末尾?我如何确定我使用的是磁盘空间而不是 RAM 内存?想要一些关于内存映射的亮点,请。谢谢!
【问题讨论】:
-
任何时候您重复发布,请交叉链接到您的其他人:discourse.julialang.org/t/use-of-memory-mapped-i-o/28311。这是尊重他人时间的礼貌方式。
-
只是为了确保我可以向最多人展示我的问题并收集很多建议,因为堆栈溢出和 Julia 论坛的所有用户不一定相同
-
是的,但人们通常会说基本相同的话。如果他们可以阅读某人已经写过的内容,他们就可以只关注他们建议的新颖部分。为他们节省一些时间,而且这样做不会造成任何损失。
-
好的 :-) 下次会考虑到这一点 ;-)
标签: out-of-memory julia memory-mapping