Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一台机器上生成多个matlab副本_Matlab_Parallel Processing_Matlab Engine - Fatal编程技术网

在同一台机器上生成多个matlab副本

在同一台机器上生成多个matlab副本,matlab,parallel-processing,matlab-engine,Matlab,Parallel Processing,Matlab Engine,我面临着一个巨大的问题。我用嵌入的Matlab函数构建了一个复杂的C应用程序,我使用Matlab引擎(engOpen()等…)调用它。发生以下情况: 我在一台机器上生成此应用程序的多个实例,每个核心一个 然而。。。然后,应用程序的速度减慢到停止。事实上,在我的16核机器上,应用程序的速度大约降低了16倍 现在我意识到这是因为每台机器只启动了一个sngle matlab引擎,我的16个实例都共享同一个matlab副本 我试着用MatlabGUI复制这一点,但问题是一样的。我在GUI中运行一个程序

我面临着一个巨大的问题。我用嵌入的Matlab函数构建了一个复杂的C应用程序,我使用Matlab引擎(engOpen()等…)调用它。发生以下情况:

  • 我在一台机器上生成此应用程序的多个实例,每个核心一个
  • 然而。。。然后,应用程序的速度减慢到停止。事实上,在我的16核机器上,应用程序的速度大约降低了16倍
  • 现在我意识到这是因为每台机器只启动了一个sngle matlab引擎,我的16个实例都共享同一个matlab副本
  • 我试着用MatlabGUI复制这一点,但问题是一样的。我在GUI中运行一个程序需要14秒,然后我在两个GUI中同时运行它,需要28秒
这对我来说是个大问题,因为如果我不得不在没有matlab的情况下重新编程整个c应用程序,我将错过最后期限。我知道matlab有用于并行编程的命令,但我的matlab调用嵌入在C应用程序中,我想运行C应用程序的多个实例。同样,我不能重构我的整个c应用程序,因为我将错过最后期限

有人能告诉我是否有解决方案(例如,在同一台机器上启动多个matlab进程)。我愿意支付额外的许可证费用。我目前已经在所有机器上安装了完全许可的matlab

非常感谢你

编辑

谢谢你Ben Voigt的帮助。我发现Matlab的一个实例已经使用了多个内核。事实上,运行一个实例可以充分利用4个内核。如果我运行两个Matlab副本,就可以充分利用8个内核。因此,它实际上是并行运行的。然而,即使2个实例似乎占用了两倍的处理能力,我仍然得到了2*的减速。因此,2个实例似乎得到的结果是4*计算能力总和的两倍。为什么会这样

MATLAB库不是线程安全的。如果创建多线程应用程序,请确保只有一个线程访问引擎应用程序

我认为matlab引擎是错误的技术。对于windows平台,您可以尝试使用com自动化服务器,该服务器具有
.Single
选项,该选项为您打开的每个com客户端启动一个matlab实例

备选方案包括:

    < LI>生成函数的C++代码。< /LI>
  • 创建一个.NET库。(东北建筑商)
  • 通过命令行运行matlab

您的速度减慢不是因为将所有N个实例塞入单个内核上的单个MatLab实例,而是因为不再有16个内核可供每个实例使用。许多MATLAB向量运算使用并行计算,即使没有明确的并行结构,因此每个实例都需要多个核才能获得最佳效率。

您确定所有16个实例都共享一个核吗?更可能的情况是,一个实例正在使用所有16个核心,而更多的实例运行速度较慢,因为它们没有16个核心。您能分别检查1个实例和N个实例的利用率吗?谢谢您是的,您是正确的。当我运行一个程序实例时,它完全使用了4个内核。所以,当我运行超过4个实例(16/4)时,我肯定会经历减速亲爱的Daniel,非常感谢您的回答。我认为问题是,即使我打开多个matlab实例,它仍然会变慢。我试着打开两个完全独立运行的MatlabGUI(不同的工作空间等),但速度仍然很慢。因此,似乎在幕后,所有的matlab实例都以某种方式合并到一个执行线程中。是否使用了所有的matlab实例?据我所知,只使用注册的自动化实例,这是第一次启动。