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.exe并2转到我的应用程序.
当我把它从MATLAB,26线程是MATLAB.exe,1对于cmd.exe和1我的应用程序.
有任何想法吗?
问题是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文件,或将其设置为更高的数字.
| 归档时间: |
|
| 查看次数: |
2476 次 |
| 最近记录: |