32 ビット Windows でのみ実行されるいくつかの matlab コードがありますが、実行するには少なくとも 6 GB の RAM が必要です。私のラボでは、6 GB RAM を搭載した唯一のマシンで 64 ビット Windows が実行されています。ここでこのコードを実行する方法はありますか? 32 ビット Windows をエミュレートして実行することを考えていますが、うまくいきますか?
6 に答える
Windows 64 ビットで 32 ビット プロセスとして実行する場合、32 ビット アプリケーションは 4 GB しかアドレス指定できません。より多くのメモリに対応するには、64 ビット アプリケーションが必要です。
私は最近、いくつかの大きな Matlab コードを 32 ビット Windows XP から 64 ビット Windows XP に移行することに取り組んでいます。ここにいる他の 1 人か 2 人の回答者とは異なり、最近では 6GB が完全に妥当なメモリ要件であると思います。ここで使用する最大のデスクトップには、デュアル クアッド コア プロセッサと 32GB RAM が搭載されています。私の科学者の同僚の何人かはもっと欲しいと思っていますが、彼らは常にもっと欲しいと思っています.
さらに進んで、RAM の使用量を減らすようにアプリケーションを書き直そうとしないことをお勧めします。それは間違った方向に向かっているでしょう。コードを 64 ビット マシンに移植すると、安価で高速になり、エラーの発生も少なくなります。リファクタリングで RAM の使用量を減らすことを主張する人には、近い将来、市場の現実に直面し、64 ビット コンピューティングが普及し、RAM が非常に安価であることを認識できるようになるのはいつ頃になるでしょうか。開発者の時間の費用と比較して?
32 ビット マシンで 6GB の RAM を使おうとするのは忘れてください。他の人が言ったように、Matlab と Windows はそれを行いません。しかし、他の人が指摘しているように、Matlab はビット数に無関心であるため、32 ビット リリースで動作する純粋な Matlab コードは、同じリリースの 64 ビット バージョンでも動作します。古い 32 ビット リリースから新しい 64 ビット リリースに移行すると、一部の Matlab 関数が廃止されていることに気付くかもしれませんが、新しい 32 ビット リリースに移行しても同じ問題が発生します。
32 ビット Windows でのみ実行されるコードがある場合は、MEX ファイルを使用していると思われます。これらは、64 ビット マシンで実行するために再コンパイルする必要があります。繰り返しになりますが、移植時に Matlab リリース間を移動する場合は、廃止された機能に注意してください。私の経験では、もう 1 つの主な落とし穴は、特定の基本的なデータ型のサイズについて行う可能性のある誤った仮定です。Fortran も C 標準 (C++ の経験がない) も、デフォルトの INTEGER (Fortran の場合) または int (C の場合) のバイト単位のサイズを実際に指定していません。C プログラマーはあまりいないと思います)。ポインターのサイズもおそらく漠然としか指定されていません。これが意味することは、(a) コード内の多くの変数宣言を変更するか、(b) コンパイラ ディレクティブ/フラグを使用して INTEGERS のデフォルト サイズを指定する必要がある可能性があることです。REAL、int、およびその他の可能性があります。(b) の方が簡単です。(a) は、将来の保守性を考えるとおそらく好ましいでしょう。
32ビットアプリケーションから6GBのRAMにアクセスすることはできません。これには2つのオプションがあります。
より少ないRAMを使用するようにコードを最適化するか、Matlabプログラムを64ビット互換にします。
最初のオプションについては、stackoverflowの優秀な人々があなたを助けることができます。
2番目のオプションの場合:32ビットのMatlabバージョンを使用していない限り、私が認識しているMatlabのどの部分も32ビットのみではありません。ただし、アクティブな保守契約を結んでいる場合は、64ビットバージョンのMatlabをダウンロードしてインストールできます。コードが32ビットWindows用にコンパイルされたmex-functionsを呼び出す場合は、64ビットWindows用にそれらを再コンパイルしてみてください。
64 ビット Windows は、32 ビット Windows プログラムを正常に実行します。しかし、32 ビット プログラムは 6 Gb またはメモリにアクセスできないため、それが役立つかどうかはわかりません。
32 ビット Windows のほとんどのバージョン (サーバー エディションを除くすべて) では、1 つのプロセスがデフォルトで 2GB に制限され、設定を変更することで 3GB に制限されていると確信しています。 32 ビット モードの Pentium Pro (およびそれ以上) の CPU。Windows Server がそれを利用する以外は何もないと思います。
Matlab プログラムでそれを利用するには、興味深いマルチプロセス作業を行って、3G メモリ バンク間で手動でページングする必要があります。
You can not use 6 GB with 32Bit addresses. A 32 Bit address can only contain values from
0 to 0xffffffff (== 4294967295 == 4GB)
Such addresses are used by and are essential for every 32 Bit program, regardless if you explicitly use pointers or not.
(Although there were/are some very exotic exceptions - but those dont apply here).