我用 VC++ 编写了一个多进程应用程序,并尝试使用命令行参数执行它system来自 MATLAB 的命令。它可以运行,但只能在一个核心上运行——有什么建议吗?
Update:事实上,它甚至没有看到第二个核心。我使用了 OpenMP 并使用了omp_get_max_threads()
and omp_get_thread_num()
检查和omp_get_max_threads()
似乎是1
当我从 MATLAB 执行应用程序时,但它是2
(如预期)如果我从命令窗口运行它。
Question:我的任务管理器报告 CPU 使用率接近 100% --- 这是否意味着上述 API 出现故障,但它仍然作为多进程应用程序运行?
确认:
I used 流程浏览器检查线程数是否存在差异。
当我从命令窗口调用应用程序时,1
线程转到cmd.exe
and 2
转到我的应用程序。
当我从 MATLAB 调用它时,26
线程用于MATLAB.exe
, 1
for cmd.exe
and 1
对于我的申请。
有任何想法吗?
问题是 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 环境变量,或将其设置为更高的数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)