2

我有一些只能在 32 位窗口上运行的 matlab 代码,但我需要至少 6 GB 的内存来运行它。在我的实验室中,唯一具有 6gb 内存的机器正在运行 64 位窗口,有什么方法可以在这里运行此代码吗?我正在考虑模拟一个 32 位窗口并在其上运行它,这行得通吗?

4

6 回答 6

5

在 Windows 64 位上作为 32 位进程运行时,您的 32 位应用程序只能寻址 4 GB。为了处理更多内存,您需要一个 64 位应用程序。

于 2009-12-30T19:36:37.413 回答
5

我最近一直致力于将我们的几个大型 Matlab 代码从 32 位 Windows XP 迁移到 64 位 Windows XP。与这里的一两个其他回答者不同,我认为如今 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 版本之间移动,请注意已停用的功能。根据我的经验,另一个主要问题是您可能对某些基本数据类型的大小做出错误假设。Fortran 和 C 标准(没有 C++ 经验可言)实际上都没有指定默认 INTEGER(对于 Fortran)或 int(对于 C——我认为不是 C 程序员)的字节大小。指针大小可能也只是模糊地指定。这意味着您可能必须 (a) 更改代码中的大量变量声明或 (b) 使用编译器指令/标志来指定 INTEGERS 的默认大小,REALS、整数和可能的其他值。(b) 更容易,(a) 可能更适合未来的可维护性。

于 2009-12-31T10:04:38.500 回答
1

您不能从 32 位应用程序访问 6GB 的 RAM。这给你留下了两个选择:

要么优化代码以使用更少的 RAM,要么使 Matlab 程序与 64 位兼容。

对于第一个选项,stackoverflow 的优秀人员可以为您提供帮助。

对于第二个选项:我所知道的 Matlab 的任何部分都不是 32 位的——除非你有 32 位的 Matlab 版本。但是,如果您有有效的维护合同,您可以下载并安装 64 位版本的 Matlab。如果您的代码调用为 32 位 Windows 编译的 mex 函数,您可以尝试为 64 位 Windows 重新编译它们。

于 2009-12-31T02:55:12.680 回答
0

您不能将 6 GB 与 32 位地址一起使用。32 位地址只能包含来自

0 to 0xffffffff (== 4294967295 == 4GB)

这些地址被每个 32 位程序使用并且对于每个 32 位程序都是必不可少的,无论您是否明确使用指针。

(尽管有一些非常奇特的例外——但这些并不适用于此)。

于 2010-01-07T21:25:48.687 回答
0

64 位 Windows 将运行 32 位 Windows 程序就好了。但是 32 位程序将无法访问 6 Gb 或内存,所以我不确定这对您有帮助。

于 2009-12-30T19:37:25.030 回答
0

我很确定大多数 32 位 Windows 版本(如除了服务器版本之外的所有版本)默认情况下将单个进程限制为 2GB,通过更改设置限制为 3GB……尽管从技术上来说可以访问 16G 的 RAM 32 位模式下的 Pentium Pro(和更高版本)CPU,我认为除了 Windows Server 之外什么都没有

为了让你的 Matlab 程序利用它,你必须做一些有趣的多进程工作来在 3G 内存库之间手动分页

于 2009-12-30T19:37:57.927 回答