内存使用查询的MATLAB并行算法
我是新来这里问问题的,虽然我以前在这里找到了许多问题的解决办法 这个特别的问题我似乎找不到答案,所以我想我会联合起来问 我正在使用并行计算工具箱一次运行多个模拟,我正在开发的代码将部署在单个内核上,因此不需要将算法转换为并行 每个模拟创建的数据结构都很大,一次运行8个模拟将使用我机器中所有可用的RAM(4GB) 我目前正在考虑减少每个模拟所使用的内存,并想知道是否有人知道如何从函数的每个实例中获取内存使用信息 到目前为止,我一直在打电话:内存使用查询的MATLAB并行算法,matlab,memory-management,parallel-processing,Matlab,Memory Management,Parallel Processing,我是新来这里问问题的,虽然我以前在这里找到了许多问题的解决办法 这个特别的问题我似乎找不到答案,所以我想我会联合起来问 我正在使用并行计算工具箱一次运行多个模拟,我正在开发的代码将部署在单个内核上,因此不需要将算法转换为并行 每个模拟创建的数据结构都很大,一次运行8个模拟将使用我机器中所有可用的RAM(4GB) 我目前正在考虑减少每个模拟所使用的内存,并想知道是否有人知道如何从函数的每个实例中获取内存使用信息 到目前为止,我一直在打电话: parfor i=1:8 [IR(:, i) Da
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的每个实例中获得信息
注意:数据结构测试作为数据返回给顶级函数
提前感谢您的帮助。您可以使用matlab profiler获得内存使用的提示:
% start profiler
profile -memory on;
% start your simulation
my_sim();
% look at profiler results
profile viewer
我不明白“F的所有8个实例使用的内存”和“F的每个实例的信息”之间的区别-您的PARFOR循环在结果的一个单独元素中捕获F的每个返回,即“每个实例”。嗨,当F运行时,它会创建几个大矩阵,这取决于调用时的输入参数,然后使用这些参数获得返回的结果,**这些矩阵随后被销毁,但我想知道的是函数运行时使用的内存我仍然感到困惑-“数据(I)”包含关于F第I次运行的内存信息,对吗?如果是,您还想知道什么?是的,数据(i)包含由
usr.MemUsedMATLAB
返回的信息,但无论矩阵(其中3个)是1000点还是1000000点,这都是相同的。因此,我得出的结论是,调用返回的是MATLAB总共使用的内存,这是F的所有实例,因为它们是并行运行的。