このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
このトピックでは,MATLAB®がメモリ不足になった場合に使用できるいくつかの方法を説明します。MATLABは、64 ビット オペレーティング システム上で稼働する 64 ビット アプリケーションです。オペレーティング システムに対して使用可能なメモリより大きなセグメントを要求する場合、MATLAB はエラー メッセージを返します。
MATLABには,大きすぎる配列が作成されるのを防ぐ,組み込みの保護機能があります。既定では,MATLABはコンピューターのRAM(バーチャルメモリを除く)を最大100%まで使用して配列にメモリを割り当てることができ,配列がそのしきい値を超えると,MATLABはエラーを返します。たとえば,次のステートメントは,無理なサイズの配列の作成を試みます。
一个=兰德(1 e6, 1 e6);
使用rand请求的1000000x1000000 (7450.6GB)数组超过了最大数组大小首选项。创建超过这个限制的数组可能需要很长时间,并导致MATLAB变得无响应。更多的信息
一个=兰德(1 e6, 1 e6);
内存不足。更多的信息
メモリ制限の問題がいかに生じたかに関わりなく,目的に応じていくつかの解決策が利用できます。メモリを効率的に使用するための対策で説明されている以下のような手法は,使用可能なメモリの最適化に役立ちます。
既にメモリを効率的に使用していても問題が解決されない場合は,このページの以降の節に解決策が見つかるかもしれません。
高
配列の活用メモリに収まらないデータの高配列は,大きすぎてメモリに収まらないデータセットの操作に役立つよう設計されています。MATLABでは、データを小さなブロックごとに操作し、データのチャンク化や処理はすべてバックグラウンドで自動処理されます。tall 配列の活用方法は主に 2 つあります。
メモリには収まるものの,計算を実行しようとするとメモリ不足となるような大規模な配列がある場合は,その配列を高配列にキャストできます。
B =高(A)
ファイルまたはフォルダーベースのデータがある場合は,数据存储
を作成してから,そのデータストアに基づく高配列を作成できます。
ds =数据存储(“路径/ / data.csv”);tt =高(ds);
数据存储
はローカルとリモート両方のデータの場所で機能するため,扱うデータを解析するために,そのデータが使用中のコンピューター上にある必要はありません。詳細については,リモートデータの操作を参照してください。コンピュータークラスターを使用している場合は,并行计算工具箱™と分散配列(并行计算工具箱)を使用し,クラスター内のすべてのマシンのメモリを結合して計算の実行に使用することができます。これにより,分散配列全体を単一のエンティティとして操作できるようになります。ただし,ワーカーは自己担当部分の配列のみを操作し,必要に応じてワーカー間で自動的にデータを転送します。
分散配列の作成は,高配列の作成とよく似ています。
ds =数据存储(“路径/ / data.csv”);dt =分布式(ds);
メモリの問題を解決する別の方法として,問題を解くために必要な部分のみを大規模なデータセットからMATLABにインポートすることが考えられます。クエリに一致する要素を明示的に検索できるデータベースなどのソースからインポートする場合は,こうした問題はありません。ただし,大規模なテキストファイルやバイナリファイルを読み込む場合には共通する問題となります。
関数数据存储
を使うと,大規模なデータセットを段階的に操作できるようになります。この関数はメモリに収まらないデータの高配列と分散配列(并行计算工具箱)の基盤となるものですが,他の目的にも使用できます。データストアは,データセットの小部分を一度にメモリに読み込む場合に常に有用です。
データストアを作成するには,ファイルの名前,または類似形式のファイルのコレクションを含むディレクトリの名前を指定する必要があります。たとえば,単一のファイルでは次のようになります。
ds =数据存储(“路径/ / file.csv”)
ds =数据存储(的路径/ /文件夹/)
*
を使用して特定タイプのファイルをすべて選択することもできます。ds =数据存储(“数据/ * . csv”)
データストア以外にも,MATLABには,垫ファイルの一部を読み込む関数matfile
など,ファイルの一部を読み込む他の関数がいくつかあります。次の表は,部分読み込みを行う関数をファイルの種類別にまとめています。
ファイルの種類 | 部分読み込み |
---|---|
垫ファイル | 関数 |
テキスト | 選択された列と行のみを読み込むことによって,大規模なテキストファイルの一部にアクセスするには,関数 |
バイナリ | 既知の形式をもつファイルの一部にアクセスするには, |
イメージ,HDF,オーディオ,ビデオ | MATLAB関数の多くはこのようなタイプのファイルからの読み込みをサポートし,それらを使用して,読む取るデータの一部を選択できます。詳細は,インポートとエクスポートでサポートされるファイル形式にリストされている関数のリファレンスページを参照してください。 |
コンピューター上のアプリケーションで使用可能な総メモリは,ディスク上の物理メモリと(RAM),“ページファイル”,すなわち“スワップファイル”で構成されます。スワップファイルは非常に大きくなることがあります(たとえば,64ビット窗口®512年上でテラバイト)。オペレーティングシステムでは,システム自体と他のプロセスのニーズに応じて,各プロセスのバーチャルメモリが物理メモリまたはスワップファイルに割り当てられます。スワップファイルのサイズを大きくすると使用可能な総メモリを増やせますが,通常はパフォーマンスの低下にもつながります。
ほとんどのシステムでは,スワップファイルのサイズを制御できます。必要な手順は,オペレーティングシステムによって異なります。
Windowsシステム——Windowsのコントロールパネルを使用して,システムにおけるバーチャルメモリページングファイルのサイズを変更します。詳細は,Windowsのヘルプを参照してください。
Linux®システム——スワップスペースは,mkswap
コマンドとswapon
コマンドを使用して変更できます。詳細を表示するには,Linuxプロンプトで”男人。
“と入力し,コマンド名を続けます。
macOSシステムには,スワップスペースを直接制御するインターフェイスはありません。
“プロセスリミット”は1つのプロセス(またはアプリケーション)で扱うことができるバーチャルメモリの最大量です。まれにこの基本設定を設定した場合は,以下を格納する十分な大きさにしなければなりません。
処理するすべてのデータ
MATLABプログラムファイル
MATLABの実行可能ファイル自体
追加の状態情報
64年ビットオペレーティングシステムは,8テラバイトのプロセスリミットをサポートしています。Linuxシステムで,バーチャルメモリを含むユーザーリミットを表示および設定するには,ulimit
コマンドを参照してください。
Linuxシステムで,Java®JVM™を使用せずにMATLABを起動すると,使用可能なワークスペースメモリを約400メガバイト増やすことができます。Java JVMを使用せずにMATLABを起動するには,コマンドラインオプション-nojvm
を使用します。このオプションは,最大連続メモリブロックのサイズもほぼ同量増やします。最大連続メモリブロックを増やすことで,最大行列サイズも可能な限り増やせます。
-nojvm
を使用すると,開発環境全体も含めた,Javaソフトウェアに依存する多くの機能が失われるという不利な点があります。-nodesktop
オプションを使用してMATLABを起動しても,あまりメモリの節約にはなりません。