MATLAB使用時に​メモリ不足を示すエラ​ー(Out of Memory、メモリ​が足りません等)が発​生するのはなぜですか​?

61 ビュー (過去 30 日間)
MathWorks Support Team
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
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 件)

カテゴリ

Help Center および File Exchangeパフォーマンスとメモリ についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!