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

61 visualizaciones (últimos 30 días)
MathWorks Support Team
MathWorks Support Team el 19 de Sept. de 2012
Editada: MathWorks Support Team el 10 de Mzo. de 2021
大きなサイズの配列を定義したりすると、MATLAB 使用時にメモリ不足を示すエラー(Out of Memory、メモリが足りません等)が発生します。
c = rand(10000);
ERROR: ??? エラー ==> rand
メモリが足りません。オプションについては、HELP MEMORY と入力してください。

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 10 de Mzo. de 2021
Editada: MathWorks Support Team el 10 de Mzo. de 2021
このエラーはデータの定義に必要なメモリが不足していると発生します。特に大量/大サイズのデータを使用すると発生する可能性が高まります。
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

Más respuestas (0)

Categorías

Más información sobre パフォーマンスとメモリ en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!