gpt4 book ai didi

multithreading - 并行化会减慢MatLab的执行速度

转载 作者:行者123 更新时间:2023-12-03 12:52:03 25 4
gpt4 key购买 nike

我在运行于具有4个真实内核的奔腾处理器上的Mac OS X上使用Matlab。

我想分析磁共振图像(MRI),并使用优化来拟合来自这些图像的信号。对于每个像素,我有35个值(即同一张图片在不同条件下获取了35次),我想将这些值调整为某个函数

下面,我将代码简化为调用fit函数的最基本循环:

 ticid1 = tic; 

for x= a:1:b
[a, b, c, d] = FitSignal(Volume(y,x,:));
end;

toc(ticid1);

这里 Volume是一个3D矩阵,其中包含所有大小约为9 MB的MRI图像。 FitSignal因此获得了一个数组,该数组包含特定像素的35个值,并且优化过程找到了最佳拟合。在这种情况下,循环运行120次(b-a = 120),这对于图像中水平线上的每个像素而言都是一次。

使用 tictoc对上述代码进行计时,整个循环大约需要50秒

我认为并行执行代码可能会加快速度。因此,我打开了3个工作程序,并使用 parfor运行了循环,但发现只有少量(20-30%)的加速。

然后,我将工作人员的数量减少到1。现在,使用 parfor运行代码大约需要90秒。因此,只有一名 worker ,该代码才是应用程序。是没有并行运行时速度的两倍。这与3名 worker 的微薄 yield 是一致的。

然后,我尝试在函数 FitSignal中计时,发现没有并行化就需要应用程序。 0.4秒,而并行化则需要0.7秒。

我知道并行化会带来开销,但是在这种情况下,这对我来说似乎太过分了。此外,一旦在函数 FitSignal中,并且只有一个工作程序,该函数是在主进程上运行还是在工作程序内运行都没关系-对吗?但是,在单独的工作程序内部运行时,该函数的运行速度相当慢!

谁能告诉我这是怎么回事?重要的是,如何通过并行执行来更改代码以利用任何可能的加速?

提前致谢

PS:我已经检查了我的系统。内存压力低,我什至在终端上发出了“清除”以释放内存。运行期间,CPU数量不超过15%。

最佳答案

在单台计算机上运行时,Matlab会自动并行化向量运算(1)...,除非您正在运行显式并行化,例如parfor(2)。

因此,这里发生的是,当您在正常模式下而不是parfor模式下运行时,根据您的数字,并行化向量操作将获得100%的加速。

当您在parfor模式下运行时,您松开了矢量运算的提升,但从parfor获得了并行化,因此速度是正常处理速度的一半,但分为三个内核,因此大约需要三分之二的时间。

以上是根据问题中的数字得出的粗略估计;当然,对于其他问题,这些相对加速会由于多种因素而变化,例如矢量化代码量的不同和parfor的开销。

关于multithreading - 并行化会减慢MatLab的执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641033/

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