gpt4 book ai didi

c++ - 这是在 MATLAB 中使用并行池的真正方法吗?

转载 作者:行者123 更新时间:2023-11-28 05:20:58 25 4
gpt4 key购买 nike

我正在使用一台具有 2 个物理 CPU 内核的机器。 Arii_Modified 函数是我写的。当我在不使用并行池的情况下按如下方式运行代码时,所用时间为 425.456

profile on
[Ps,Pd,Pv,ThetaMean,Variance,frobonius] = Arii2011_Modified(C11,C12_imag,C12_real,C13_imag,C13_real,C22,C23_imag,C23_real,C33);
profile off
profsave
span = C11+C22+C33;
total=Pd+Ps+Pv+frobonius;
save('results.mat');

但是当我启动一个包含两个 worker 的并行池时,如下所示:

parpool('local',2)
profile on
[Ps,Pd,Pv,ThetaMean,Variance,frobonius] = Arii2011_Modified(C11,C12_imag,C12_real,C13_imag,C13_real,C22,C23_imag,C23_real,C33);
profile off
profsave
span = C11+C22+C33;
total=Pd+Ps+Pv+frobonius;
save('results.mat');
p = gcp;
delete(p)

耗时687.687秒。
我真正使用了并行池吗?
Arii2011_modified 函数中的代码完全是一个顺序代码。
我已经使用 MEX 解决方案来加速它,但是在 Arii2011_Modified.m 代码和其中的 mex 函数的 C++ 源代码中都没有使用并行编程代码?

最佳答案

parpool 本身并不能神奇地使任何代码并行运行并执行得更快。它只是创建一个 MATLAB 实例池,这些实例可以作为工作人员处理您传递给它们的任务。您只是创建了一个并行池(使用 parpool),但从未真正使用过它,因此您不能指望您的代码执行得更快。增加的执行时间仅仅是因为启动池所需的时间。

如果您想实际使用您创建的并行池,您需要将部分代码包装在 parfor 构造中,其中每次迭代都在 parfor 是独立的,通过 parfor 循环的每次迭代都将移交给其中一个可用的工作人员。

如果您的代码实际上不是可并行化的,可能值得仔细查看 Arii2011_Modified.m 并查看您是否可以对其某些部分进行矢量化以缩短执行时间。

Mathworks 有一些很棒的 documentation关于如何利用 MATLAB 中的并行计算。

作为旁注,如果您想实际测量执行时间,profile 是一种不好的方法,因为它会跟踪所有的很多开销函数调用。相反,您应该使用 timeit .

关于c++ - 这是在 MATLAB 中使用并行池的真正方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41509094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com