使用 drange 在 MATLAB 中进行并行计算
Parallel Computing in MATLAB using drange
我有一个这样的代码,我想 运行 使用 parpool:
结果 = zeros(J,K)
for k = 1:K
for j = 1:J
build(:,1) = old1(:,j,k)
build(:,2) = old2(:,j,k)
result(j,k) = call_function(build); %Takes a long time to run
end
end
运行 这段代码需要很长时间,我必须多次 运行 我的模拟所以我想 运行 最外层的循环(k = 1:K) 在 MATLAB 中并行。
据我所知,我不能使用 parfor,因为每个函数都使用相同的变量 old1 和 old2。我可以使用 spmd 并分发我的矩阵 old1 和 old2。但我读到这会创建与工人一样多的变量副本,我不希望这种情况发生。我可以使用 drange。但我不确定它是如何工作的。我发现很难实际使用我在 MATLAB 参考资料中阅读的内容。任何资源和指针都会有很大帮助!
约束条件如下:
不得创建变量 old1、old2 的多个副本。但是我可以将它跨工作人员切分,因为每次迭代都不需要其他迭代。
必须只分配最外层的循环。为了便于访问此代码块之外的数据。
谢谢。
old1和old2我觉得可以用。使用以下方法初始化为常量:
old1 = parallel.pool.Constant(old1);
old2 = parallel.pool.Constant(old2);
你看过这个post吗?
https://www.mathworks.com/help/distcomp/improve-parfor-performance.html
我有一个这样的代码,我想 运行 使用 parpool: 结果 = zeros(J,K)
for k = 1:K
for j = 1:J
build(:,1) = old1(:,j,k)
build(:,2) = old2(:,j,k)
result(j,k) = call_function(build); %Takes a long time to run
end
end
运行 这段代码需要很长时间,我必须多次 运行 我的模拟所以我想 运行 最外层的循环(k = 1:K) 在 MATLAB 中并行。
据我所知,我不能使用 parfor,因为每个函数都使用相同的变量 old1 和 old2。我可以使用 spmd 并分发我的矩阵 old1 和 old2。但我读到这会创建与工人一样多的变量副本,我不希望这种情况发生。我可以使用 drange。但我不确定它是如何工作的。我发现很难实际使用我在 MATLAB 参考资料中阅读的内容。任何资源和指针都会有很大帮助!
约束条件如下: 不得创建变量 old1、old2 的多个副本。但是我可以将它跨工作人员切分,因为每次迭代都不需要其他迭代。 必须只分配最外层的循环。为了便于访问此代码块之外的数据。
谢谢。
old1和old2我觉得可以用。使用以下方法初始化为常量:
old1 = parallel.pool.Constant(old1);
old2 = parallel.pool.Constant(old2);
你看过这个post吗? https://www.mathworks.com/help/distcomp/improve-parfor-performance.html