我面临着一个巨大的问题。我构建了一个带有嵌入式Matlab函数的复杂C应用程序,我使用Matlab引擎调用它(engOpen()等...)。发生以下情况:
对我来说这是一个很大的问题,因为如果我不用matlab重新编程我的整个c应用程序,我将错过我的截止日期。我知道matlab有并行编程的命令,但我的matlab调用嵌入在C应用程序中,我想运行C应用程序的多个实例。同样,我无法重构我的整个c应用程序,因为我会错过截止日期。
任何人都可以告诉我是否有解决方案(例如,在同一台机器上真正启动多个matlab进程)。我愿意支付额外的许可证。我目前已经在所有机器上安装了完全lincensed matlab。
非常感谢你!
修改
感谢Ben Voigt的帮助。我发现Matlab的单个实例已经在使用多个内核。实际上,运行一个实例可以让我充分利用4个内核。如果我运行两个Matlab副本,我可以充分利用8个内核。因此它实际上是并行运行的。然而,即使2个实例似乎占用了两倍的处理能力,我仍然会减速2倍。因此,2个实例似乎得到两倍的结果,4 *计算能力总和。为什么会这样?
答案 0 :(得分:1)
您的减速不是由将所有N个实例填充到单个核心上的单个MatLab实例中引起的,而是由于每个实例不再有16个核心。即使没有明确的并行结构,许多MATLAB向量运算也使用并行计算,因此每个实例需要多个核心才能实现最佳效率。
答案 1 :(得分:0)
MATLAB库不是线程安全的。如果您创建多线程应用程序,请确保只有一个线程访问引擎应用程序。
我认为matlab引擎是错误的技术。对于Windows平台,您可以尝试使用com自动化服务器,该服务器具有.Single
选项,可为您打开的每个com客户端启动一个matlab实例。
替代方案是: