5
如何在不创建导致内存溢出的临时矩阵的情况下“复制”矩阵?
通过将矩阵分配到更大的已分配内存中,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有main_mat没有什么方法可以将其“粉碎” 到没有开销的地方?提前致谢。 编辑: main_mat事先分配时发生溢出。如果main_mat使用main_mat=zeros(500,500,1);(较小的尺寸)初始化,则不会发生溢出,但是由于在分配矩阵之前未进行分配,因此溢出会变慢。随着范围的k增加,这将大大降低性能。