从MATLAB运行多进程应用程序

Jac*_*cob 5 c++ windows matlab openmp multiprocessing

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

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

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

确认:

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

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

当我把它从MATLAB,26线程是MATLAB.exe,1对于cmd.exe1我的应用程序.

有任何想法吗?

And*_*nke 7

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

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

OMP_NUM_THREADS=1 
Run Code Online (Sandbox Code Playgroud)

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

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