gpt4 book ai didi

matlab - 如何 'copy'矩阵而不在内存中创建导致内存溢出的临时矩阵?

转载 作者:行者123 更新时间:2023-12-02 12:48:50 27 4
gpt4 key购买 nike

通过将矩阵分配到更大的分配内存中,matlab 在“复制”它时会以某种方式复制它,如果要复制的矩阵足够大,就会出现内存溢出。这是示例代码:

main_mat=zeros(500,500,2000);
n=500;
slice_matrix=zeros(500,500,n);
for k=1:4
parfor i=1:n
slice_matrix(:,:,i)=gather(gpuArray(rand(500,500)));
end
main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix; %This is where the memory will likely overflow
end

有什么方法可以将 slice_matrix 'smash' 到 main_mat 上而不产生任何开销吗?提前致谢。

编辑:

预先分配main_mat时发生溢出。如果使用main_mat=zeros(500,500,1);(较小的尺寸)初始化main_mat,则不会发生溢出,但由于之前没有完成分配,因此会减慢速度矩阵被分配到其中。随着 k 范围的增加,这将显着降低性能。

最佳答案

主要问题是数字比零占用更多空间。main_mat=zeros(500,500,2000); 占用很少的 RAM,而 main_mat = rand(500,500,2000); 占用大量 RAM,无论您使用 GPU 还是 parfor(在事实上,parfor 会让你使用更多的内存)。所以这并不是一种不自然的内存膨胀。按照下面丹尼尔的链接,似乎零的分配只会创建指向内存的指针,并且仅当您使用“数字”矩阵时才会填充物理内存。这是由操作系统管理的。它预计适用于 Windows、Mac 和 Linux,无论您使用 Matlab 或其他语言(例如 C)来完成。

关于matlab - 如何 'copy'矩阵而不在内存中创建导致内存溢出的临时矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359822/

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