Spa*_*cey 12 error-handling ram matlab memory-management
标题说明了一切.
基本上,每当我错误地让MATLAB使用大量的RAM进行模拟时,我就厌倦了重置我的comp,我正在创建许多参数.
如果RAM使用量开始超过我总RAM的指定百分比,有没有办法让它停止/错误?
我知道我在每次分配内存时都会尝试/捕获,但这是针对已编写的程序,并且为了将来参考,我希望能够在开始时设置一个参数并完成它.
有办法吗?
谢谢!
您可以为进程组设置虚拟内存配额.在Windows上使用Job对象.在*nix上使用ulimit.这适用于任何过程,而不仅仅是MatLab.
看到
当Matlab开始使用虚拟内存时,您会看到问题.您通常应该能够通过任务管理器终止Matlab进程,但这并不总是可取的.不幸的是,没有简单的Matlab内部开关可以全局限制最大阵列大小.
你可以做的是使交换文件的大小非常小,这样Matlab就不能真正写很多东西,但这可能反过来影响其他程序的性能.其他非Matlab解决方案是切换到Linux(您可以更轻松地为程序设置内存限制,请参阅@ BenVoigt的答案,了解有关在Windows和Linux上设置限制的详细信息),或运行虚拟机中的所有内容.
为了将来参考,在我的模拟中,我有一个方法(子函数,如果你不想这样做OOP)在我的预分配开始时计算给定模拟参数的估计总内存使用量(元素数量)我将使用的所有大型数组8用于双精度存储器(以字节为单位),并且当使用太多RAM时会抛出错误.
这是快速内存检查的示例.我知道我将分配3 m-by-3-by-t阵列和5 m-by-t阵列,所有这些都是双倍的.
maxMemFrac = 0.8; %# I want to use at most 80% of the available memory
numElements = 3 * (m * 3 * t) + 5 * (m * t);
numBytesNeeded = numElements * 8; %# I use double
%# read available memory
[~,memStats] = memory;
if numBytesNeeded > memStats.PhysicalMemory.Available * maxMemFrac
error('MYSIM:OUTOFMEMORY','too much memory would be needed')
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4549 次 |
| 最近记录: |