代码之家  ›  专栏  ›  技术社区  ›  Jacob

从Matlab运行多进程应用程序

  •  5
  • Jacob  · 技术社区  · 16 年前

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

    更新 :实际上,它甚至看不到第二个核心。我用OpenMP omp_get_max_threads() omp_get_thread_num() 检查和 OMP获取最大线程数() 似乎是 1 当我从Matlab执行应用程序时,它是 2 (如预期的那样)如果我从命令窗口运行它。

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

    确认:

    我用过 Process Explorer 检查线程数量是否存在差异。

    当我从命令窗口调用应用程序时, 线程转到 cmd.exe 去我的申请表。

    当我从Matlab调用它时, 26 线程用于 MATLAB.exe , 对于 命令提示符 为我的申请。

    有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Andrew Janke    16 年前

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

    在启动app plain的命令窗口中执行“set>plain.txt”,在matlab中执行“system('set>from_matlab.txt')”并对输出进行比较。这将向您展示matlab引入的环境变量的差异。当我这样做时,它会出现在继承自Matlab的环境中,但不会出现在纯命令窗口的环境中。

    OMP_NUM_THREADS=1 
    

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

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

        2
  •  1
  •   Pyrolistical    16 年前

    在matlab之外运行该命令,看看它使用了多少内核。在Matlab中运行它应该没有区别,因为它只是对操作系统的一个调用。也就是说,相当于在命令行上运行。

    编辑

    Ok Odd,当您调用 feature('numcore')时会得到什么?您使用的是什么版本的matlab?

    启用此功能有帮助吗?

    S使用。在Matlab中运行它应该没有区别,因为它只是对操作系统的一个调用。也就是说,相当于在命令行上运行。

    编辑

    好吧,奇怪,你打电话时会得到什么 feature('NumCores') ?您使用的是什么版本的matlab?

    启用此功能有帮助吗?

    Hosted by imgur.com

        3
  •  0
  •   S.Fiorentino    16 年前

    必须在matlab命令行中执行:

    setenv omp_num_线程4

    如果您想使用4个线程。