【发布时间】:2015-08-20 14:40:53
【问题描述】:
我只需要使用 MSMPI 编写一个简单的 MFC Windows 应用程序,但我不想启动多个进程,因为我的 GUI 应用程序可能需要在多线程部分之前进行一些用户交互。例如,我想在单击“运行”按钮后创建 2 个线程。
我尝试使用命令行运行我的程序:mpiexec.exe -n 2 myprogram.exe,但这会创建两个进程,我会看到两个应用程序窗口。
我也尝试过 Visual Studio 2010 中的 MPI 集群调试选项,但它也会创建两个进程。
这似乎是一个非常基本的问题,但我发现在 Google 中很难找到答案。
编辑
为了消除这里的混乱,我必须澄清一些事情:
- 我有一个非常复杂且庞大的代码库,已经使用 MS-MPI 实现并行性,我必须在它之上构建一个 MFC GUI。出于这个原因,我不能使用任何其他并行机制,例如 std::thread,因为这意味着我必须重写很多负担不起的东西。
- 据我了解,要启动 MPI 程序,我必须在 Windows 中运行名为 mpiexec.exe 的外部程序。我还没有弄清楚是否可以自行启动该程序并仍然实现 MPI 功能。我对 MPI 很陌生。我不太确定是否有可能实现我的要求。如果不是,如果有人能告诉我原因和可能的解决方法,我将不胜感激。
简单地说,我想为支持 MPI 的软件创建一个 MFC GUI 包装器,这必须是一个多线程程序,而不是这个 GUI 包装程序的多个实例(进程)(例如,通过 mpiexec -n 2 xxx 运行这个程序.exe 只会创建同一程序的 2 个实例)
【问题讨论】:
-
为什么坚持使用MPI?你探索过 std::thread 吗?
-
如果现有代码库没有使用 MPI 实现,我不会坚持使用 MPI。现在我需要为这段代码构建一个 GUI,这就是我在这里结束的原因 - 我的问题中的描述只是一个简化的场景。
-
那么,MPI 中的现有代码库是什么?如果不是,那么我建议使用 std::thread 除非你有特定的理由使用 MPI
-
是的,现有的代码库在 MPI 中。所以我别无选择。
-
我在上面的评论中说过,我的问题的描述只是一个简化的场景 - 其他人更容易理解我的问题。但实际的代码库比这复杂得多,我无法使用 std::thread 重写所有内容。
标签: c++ multithreading mfc mpi