gpt4 book ai didi

c++ - 从 MATLAB 运行多进程应用程序

转载 作者:可可西里 更新时间:2023-11-01 13:29:34 29 4
gpt4 key购买 nike

我用 VC++ 编写了一个多进程应用程序,并尝试使用 system 的命令行参数来执行它来自 MATLAB 的命令。它可以运行,但只能在一个核心上运行——有什么建议吗?

更新:事实上,它连第二个核心都看不到。我使用 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.exe1 用于 cmd.exe1 用于我的应用程序。

有什么想法吗?

最佳答案

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

在启动应用程序的命令窗口中执行“set > plain.txt”,并在 Matlab 中执行“system('set > from_matlab.txt')”,然后比较输出。这将向您展示 Matlab 引入的环境变量的差异。当我这样做时,它会出现在从 Matlab 继承的环境中,但不会出现在普通命令窗口的环境中。

OMP_NUM_THREADS=1 

这看起来像是与您问题中的函数调用相关的 OpenMP 设置。我敢打赌,您生成的应用会看到并尊重它。

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

关于c++ - 从 MATLAB 运行多进程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626230/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com