poster
2019-12-10, 20:30
我已经用VC ++编写了一个多进程应用程序,并尝试使用MATLAB中的system (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/system.html)命令和命令行参数来执行它。它可以运行,但仅在一个核心上运行---有什么建议吗?
更新 :实际上,它甚至看不到第二个核心。我使用OpenMP并使用omp_get_max_threads()和omp_get_thread_num()进行检查,当我从MATLAB执行应用程序时, omp_get_max_threads()似乎为1 ,但如果从命令窗口运行,则为2 (如预期的那样)。
问题 :我的任务管理器报告CPU使用率接近100%---这是否意味着上述API仍在作为多进程应用程序运行而出现故障?
确认:
我使用Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)来检查线程数是否有任何差异。
当我从命令窗口调用应用程序时, 1线程转到cmd.exe , 2线程转到我的应用程序。
当我从MATLAB调用它时, MATLAB.exe有26线程, cmd.exe 1线程,而我的应用程序有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环境变量,或将其设置为更大的数字。
更多&回答... (https://stackoverflow.com/questions/2626230)
更新 :实际上,它甚至看不到第二个核心。我使用OpenMP并使用omp_get_max_threads()和omp_get_thread_num()进行检查,当我从MATLAB执行应用程序时, omp_get_max_threads()似乎为1 ,但如果从命令窗口运行,则为2 (如预期的那样)。
问题 :我的任务管理器报告CPU使用率接近100%---这是否意味着上述API仍在作为多进程应用程序运行而出现故障?
确认:
我使用Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)来检查线程数是否有任何差异。
当我从命令窗口调用应用程序时, 1线程转到cmd.exe , 2线程转到我的应用程序。
当我从MATLAB调用它时, MATLAB.exe有26线程, cmd.exe 1线程,而我的应用程序有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环境变量,或将其设置为更大的数字。
更多&回答... (https://stackoverflow.com/questions/2626230)