【发布时间】:2012-02-21 15:46:23
【问题描述】:
虽然我以前在这里找到了许多问题的解决方案,但我是新来的提问者。
这个特殊的问题我似乎找不到答案,所以我想加入并询问。
我正在使用并行计算工具箱一次运行多个模拟,我正在开发的代码将部署在单核上,因此无需将算法转换为并行。
每个模拟创建的数据结构都很大,一次运行 8 个模拟会占用我机器中所有可用的 RAM (4GB)。
我目前正在考虑减少每次模拟使用的内存,并且想知道是否有人知道如何从函数的每个实例中获取内存使用信息。
到目前为止,我一直在打电话:
parfor i=1:8
[IR(:, i) Data(i)] = feval(F, NX, NY(i), SR, NS, i);
end
在函数F内部
[usr, sys] = memory;
format short eng;
TEST.Mem = usr.MemUsedMATLAB;
但可以理解的是,这会返回所有 8 个 F 实例正在使用的内存。
我想从每个 F 实例中获取信息。
注意:数据结构 TEST 作为数据返回给顶层函数。
提前感谢您的帮助。
【问题讨论】:
-
我不明白“所有 8 个 F 实例使用的内存”和“来自每个 F 实例的信息”之间的区别 - 您的 PARFOR 循环正在将 F 的每个返回捕获到一个单独的元素中结果,所以这就是“每个实例”。
-
嗨,当 F 运行时,它会创建几个大矩阵,这些矩阵取决于调用时的输入参数,然后用于获取返回的结果,
-
** 这些矩阵随后被销毁,但我想知道的是函数运行时正在使用的内存
-
我仍然很困惑 - “Data(i)” 包含有关 F 的第 i 次运行的内存信息,对吗?如果是这样,您还想知道什么?
-
是的,Data(i) 包含
usr.MemUsedMATLAB返回的信息,但无论矩阵(其中 3 个)是 1,000 点还是 1,000,000 点,这都是相同的。因此,我得出的结论是,该调用返回了 MATLAB 总共使用的内存,这是 F 的所有实例,因为它们是并行运行的。
标签: matlab memory-management parallel-processing