メモリオーバーフローを引き起こしたメモリに一時的な行列を作成せずに行列を「コピー」する方法は?
はるかに大きい割り当てられたメモリにマトリックスを割り当てることにより、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増えるにつれてパフォーマンスが大幅に低下します。