0

我正在研究一种在不同光照条件下的自适应和全自动分割算法,该算法的核心使用粒子群优化(PSO)来调整模糊系统,相信我这非常耗时:| 只有 5 个粒子和 100 次迭代,我必须等待 2 到 3 个小时!它只是从我的数据集中处理一张包含 100 多张照片的图像!

我正在使用 matlab R2013 ,带有 intel coer i7-2670Qm @ 2.2GHz //8.00GB RAM//64 位操作系统

问题是:启动程序时,它只使用了我的 CPU 的 12%-16%,并且只有一个内核在工作!

我进行了很多搜索并进入了 matlabpool,所以我将这一行添加到我的代码中:

matlabpool open 8

现在当我启动程序时,任务管理器显示 98% 的 CPU 使用率,但这只是几秒钟!之后它又回到了 12-13% 的 CPU 使用率:|

你知道我怎样才能让这段代码运行得更快吗?!

4

3 回答 3

2

12% 听起来像 Matlab 只使用一个线程/核心,而这个是满载的,这是正常的。

matlabpool open 8还不够,这只是打开了工人。您必须使用 parfor 之类的命令来为它们分配工作。

于 2013-10-27T09:10:41.670 回答
1

根据 Daniel 的建议,理想情况下应用 PARFOR,您会在算法中发现一个耗时的 FOR 循环,其中迭代是独立的,并将其转换为 PARFOR。一般来说,PARFOR 在可能的最外层应用时效果最佳。在开始添加并行性之前,绝对值得使用 MATLAB 分析器来帮助您优化串行代码。

于 2013-10-27T10:24:33.263 回答
0

通过我自己的模拟,我发现我无法使用 Parfor 重新编码它们,我拥有的 for 循环过于交织在一起,无法利用多个内核。

然而:

您可以打开 Matlab 的第二个(以及第三个和第四个等)实例,并告诉这个附加实例运行另一个作业。matlab open 的每个实例都将使用不同的内核。因此,如果您有一个四核,您可以打开 4 个实例并通过在所有 4 个中运行代码来获得 100% 的效率。

因此,我通过同时打开多个 matlab 实例并运行作业来提高效率。我的工作一次需要 8 到 27 个小时,正如人们想象的那样,如果没有液体冷却,我烧坏了我的 cpu 风扇,不得不更换它。

还要考虑优化你的 matlab 代码,我最近优化了我的代码,现在它的运行速度提高了 40%。

于 2014-10-10T19:53:51.347 回答