从MATLAB运行多进程应用程序

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

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

问题 :我的任务pipe理器报告CPU使用率接近100% – 这是否意味着上述API出现故障,它仍然作为多进程应用程序运行?

确认:

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

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

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

有任何想法吗?

Solutions Collecting From Web of "从MATLAB运行多进程应用程序"

问题是Matlab如何影响你的应用程序的行为,因为它是一个单独的过程。 我怀疑Matlab是以一种影响OMP的方式来修改环境变量,也许是因为它在内部使用了OMP,并且你从Matlab产生的过程继承了这个修改过的环境。

从Matlab的命令窗口中执行“set> plain.txt”,然后在Matlab中输入“system('set> from_matlab.txt')”,然后区分输出。 这将向您展示Matlab介绍的环境变量的差异。 当我这样做时,这出现在从Matlab继承的环境中,而不是在普通命令窗口的环境中。

 OMP_NUM_THREADS=1 

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

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

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

编辑

好的,当你调用feature('NumCores')时,你会得到什么? 你使用的是什么版本的Matlab?

这有帮助吗?

由imgur.com主办

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

setenv OMP_NUM_THREADS 4

如果你想使用4个线程。