从MATLAB运行多进程应用程序

时间:2010-04-13 00:11:32

标签: c++ windows matlab multiprocessing openmp

我在VC ++中编写了一个多进程应用程序,并尝试使用MATLAB中的system命令使用命令行参数执行它。它运行,但只在一个核心---任何建议吗?

更新:事实上,它甚至没有看到第二个核心。我使用OpenMP并使用omp_get_max_threads()omp_get_thread_num()进行检查,当我从MATLAB执行应用程序时,omp_get_max_threads()似乎是1,但它是2(正如预期的那样) )如果我从命令窗口运行它。

问题:我的任务管理器报告CPU使用率接近100%---这是否意味着前面提到的API出现故障,它仍在作为多进程应用程序运行?

确认:

我使用Process Explorer来检查线程数是否有任何差异。

当我从命令窗口调用应用程序时,1线程转到cmd.exe2转到我的应用程序。

当我从MATLAB调用它时,26线程用于MATLAB.exe1用于cmd.exe1用于我的应用。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

问题是Matlab如何影响您应用的行为,因为它是一个单独的过程。我怀疑Matlab正在以影响OMP的方式修改环境变量,可能是因为它在内部使用OMP,而您从Matlab产生的进程继承了这个修改过的环境。

从命令窗口执行“set> plain.txt”,在applab中启动app plain,并在Matlab中执行“system('set> from_matlab.txt')”,并对输出进行区分。这将向您展示Matlab引入的环境变量的差异。当我这样做时,它出现在从Matlab继承的环境中,但不出现在普通命令窗口的环境中。

OMP_NUM_THREADS=1 

这看起来像是与您问题中的函数调用相关的OpenMP设置。我敢打赌你的衍生应用程序正在看到并尊重它。

我不知道为什么Matlab会设置它。但作为一种解决方法,当您从Matlab启动应用程序时,不要直接调用它,而是调用一个清除OMP_NUM_THREADS环境变量的包装器.bat文件,或者将其设置为更高的数字。

答案 1 :(得分:1)

在Matlab之外运行命令,看看它使用了多少个核心。在Matlab中运行它应该没有区别,因为它只是调用操作系统。 IE浏览器。相当于在命令行上运行。

修改

好奇怪,你拨打feature('NumCores')后会得到什么?您使用的是什么版本的Matlab?

启用此功能有帮助吗?

Hosted by imgur.com

答案 2 :(得分:0)

你必须在MATLAB命令行中执行:

  
    

setenv OMP_NUM_THREADS 4

  

如果你想使用4个线程。