MATLAB使用時にメモリ不足を示すエラー(Out of Memory、メモリが足りません等)が発生するのはなぜですか?
61 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2012 年 9 月 19 日
編集済み: MathWorks Support Team
2021 年 3 月 10 日
大きなサイズの配列を定義したりすると、MATLAB 使用時にメモリ不足を示すエラー(Out of Memory、メモリが足りません等)が発生します。
c = rand(10000);
ERROR: ??? エラー ==> rand
メモリが足りません。オプションについては、HELP MEMORY と入力してください。
採用された回答
MathWorks Support Team
2021 年 3 月 10 日
編集済み: MathWorks Support Team
2021 年 3 月 10 日
このエラーはデータの定義に必要なメモリが不足していると発生します。特に大量/大サイズのデータを使用すると発生する可能性が高まります。
MATLABで使用できる最大メモリ量はOSに依存します。32-bit OSの場合、単一アプリケーションで使用できる論理メモリ空間(物理メモリ+仮想メモリ)は通常2GBまでとなっておりますので、MATLABが利用できるメモリも最大2GBとなっています。ただし、MATLAB自体が占めるメモリや、計算途中のデータ等も含めて2GBまでとなりますので、データ割り当てに使用できるメモリ量は2GBよりもずっと小さくなります。
また、MATLABではデータの割り当てに対して連続したメモリ領域を必要とします。メモリが断片化された状態では、空きメモリが多い場合であってもデータを定義できない可能性がありますので注意が必要です。
回避方法としては、下記の方法が考えられます。複数の方法を組み合わせるとより効果的です。
1. 不用なデータの削除
一時的に使用する変数等の不要なデータがあれば、CLEARコマンドで削除します。
2. メモリの連続化(デフラグ)
PACK コマンドを実行し、断片化したメモリを連続化(デフラグ)します。
3. データ・プログラムの分割
可能であればデータ・プログラムを一度に処理せず、分割して処理します。
4. 大サイズデータのメモリ領域確保
ZEROS 等の関数を用いてデータが使用するメモリ領域を予め確保しておくことにより、メモリの断片化を防ぐことができます。
この方法は特に大サイズのデータについて有効であり、計算時間の短縮にも貢献します。下記はそのコード例です。
<領域確保未使用コード>
for m = 1:1000
for n = 1:1000
x(m, n) = m + n;
end
end
<領域確保使用コード>
x = zeros(1000, 1000);
for m = 1:1000
for n = 1:1000
x(m, n) = m + n;
end
end
5. MATLAB使用メモリの抑制
5-1) 非Java環境でMATLABを起動します。
5-2) 非デスクトップ環境でMATLABを起動します。
上記 5-1, 5-2 の起動方法については、以下の関連ソリューションをご参照ください。
・MATLAB5.3.1(R11.1)までと比べ、MATLAB 6.0(R12)以降では、起動や実行が遅いのはなぜですか?
6. 仮想メモリの拡張
仮想メモリを拡張することにより、使用メモリ量を増やすことができます。
ただし、この場合も32-bit OSの使用メモリ量の制限(通常2GB)を超えることはできません。
7. 64-bit OS 版 MATLAB の使用
64-bit OS では、単一アプリケーションで使用できる論理メモリ空間が 32-bit OS よりも増加しています。このため、32-bit OS ではメモリ不足となるような大量・大サイズのデータの使用が 64-bit OS 版 MATLAB では可能です。
なお、下記 URL に MATLAB のメモリ管理に関する情報が掲載されています。
・MATLAB: パフォーマンスとメモリ
https://jp.mathworks.com/help/matlab/performance-and-memory.html
0 件のコメント
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!