问题标签 [intel-mpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3674 浏览

c++ - 使用英特尔 MPI 构建 Boost.MPI

我正在尝试使用 Intel MPI 4.0.0.012 构建 Boost.MPI 1.47,但 Boost 无法找到安装。我using mpi ;在 user-config.jam 中尝试了各种 -variants,包括using mpi ;using mpi : mpicl ;using mpi : c:/path/to/mpi/mpicl.bat没有运气。我也尝试过使用using mpi : <find-shared-library>impi ;虽然我不确定<find-shared-library>真正做什么)。

使用using mpi ;我得到:

使用using mpi : mpicc我得到:

using mpi : <find-shared-library>impi ;结果是

如何将 Boost.MPI 与英特尔 MPI(Windows、Visual Studio 2010、x64)链接?

0 投票
1 回答
4385 浏览

c - MPI 广播二维数组

我有一个二维双精度数组,由多个进程并行操作。每个进程都操作数组的一部分,并且在每次迭代结束时,我需要确保所有进程都具有相同的二维数组副本。

假设一个大小为 10*10 的数组和 2 个进程(或处理器)。过程 1 (P1) 处理 2D 行的前 5 行(总共 5*10=50 个元素),P2 处理最后 5 行(总共 50 个元素)。在每次迭代结束时,我需要 P1 拥有(它自己的前 5 行 + P2 的最后 5 行)。P2 应该有(P1 的前 5 行 + OWN 最后 5 行)。我希望情况很清楚。

我正在尝试使用下面给出的代码进行广播。但是我的程序一直退出并出现此错误:“应用程序终止于退出字符串:挂断(信号 1)”。

我已经在使用一个连续的 2D 内存分配器,如此处所指出的:MPI_Bcast a dynamic 2d array by Jonathan。但我仍然遇到同样的错误。

有人可以帮我吗?

我的代码:

第 2 部分:上面的代码是使用一维分解的拉普拉斯方程并行求解器的一部分,我不想使用 Master-worker 模型。如果我使用 Master-worker 模型,我的代码会更容易吗?

0 投票
1 回答
121 浏览

parallel-processing - 指定 MPI 用户

可能重复:
将 MPI 主机文件配置为使用多个用户身份

有谁知道可以通过mpirun指定必须在与给定主机或 MPI 执行中的主机列表的特定ssh连接中使用的用户?我需要在不同的节点中使用不同的用户。

0 投票
2 回答
2160 浏览

linux - MPI_SEND 占用大量虚拟内存

在大量内核上调试我的程序时,我遇到了非常奇怪的insufficient virtual memory. 我的调查导致代码和平,主人向每个奴隶发送小消息。然后我写了一个小程序,其中 1 个 master 简单地发送 10 个整数,MPI_SEND所有的 slave 用MPI_RECV. /proc/self/status之前和之后的文件比较MPI_SEND显示,内存大小之间的差异是巨大的!最有趣的事情(这使我的程序崩溃)是该内存不会在之后释放MPI_Send并且仍然占用大量空间。

有任何想法吗?

0 投票
1 回答
454 浏览

c - 英特尔 mpicc 链接器错误未定义对“_mm_idivrem_epi32”的引用

我正在尝试使用版本 11.1 20090511 在具有 MPICC 的集群上编译 milcv7.7.8/ks_spectrum 的源代码,当通过“make ks_spectrum_hisq”命令在 milcv7.7.8/ks_spectrum 中创建源代码时,最后错误出现为

com_mpi.o: 在函数initialize_machine': ../generic/com_mpi.c:(.text+0xb447): undefined reference to_mm_idivrem_epi32 '

我现在知道这个函数 _mm_idivrem_epi32 是 intel 编译器中 ia32intrin.h 文件的一部分。

当我在具有 14.0.0 20130728 版本的英特尔编译器的新集群上使用最新的英特尔 mpiicc 时,代码编译成功。那么有什么方法可以告诉链接器包含函数 _mm_idivrem_epi32 位置...

0 投票
1 回答
536 浏览

mpi - 在不同的通信器中收到 MPI 消息

据我了解,MPI 通信器限制了通信范围,因此从一个通信器发送的消息永远不会在另一个通信器中接收。

然而,下面内联的程序似乎与此相矛盾。

我知道MPI_Send调用在发布匹配接收之前返回,因为它在引擎盖下进行了内部缓冲(而不是MPI_Ssend)。我也明白这MPI_Comm_free不会立即破坏通信器,而只是将其标记为释放并等待任何挂起的操作完成。我想我不匹配的发送操作将永远挂起,但是我想知道为什么同一个对象(整数值)会被第二个通信器重用!?

这是正常行为,MPI 库实现中的错误,还是我的程序不正确?

任何建议都非常感谢!

后期编辑:发布后续问题


输出:

0 投票
2 回答
293 浏览

error-handling - 在不同的通信器中收到 MPI 消息 - 错误的程序或 MPI 实现错误?

这是我之前的问题的后续,其结论是程序错误,因此预期的行为是未定义的。

我在这里尝试创建的是一个简单的错误处理机制,为此我将针对空消息的 Irecv 请求用作“中止句柄”,将其附加到我的正常MPI_Wait调用(并将其转换为MPI_WaitAny),以便允许我取消阻止进程 1,以防进程 0 发生错误并且它无法再到达应该发布匹配的点MPI_Recv

发生的事情是,由于内部消息缓冲,MPI_Isend可能会立即成功,而其他进程无法发布匹配的MPI_Recv. 所以没有办法取消它了。

我希望一旦所有进程调用,MPI_Comm_free我就可以一劳永逸地忘记该消息,但事实证明,情况并非如此。相反,它被传递到MPI_Recv以下通信器中。

所以我的问题是:

  1. 这也是一个错误的程序,还是 MPI 实现(英特尔 MPI 4.0.3)中的一个错误?
  2. 如果我把我的MPI_Isend电话变成MPI_Issend,程序按预期工作 - 我至少在这种情况下可以放心程序是正确的吗?
  3. 我在这里重新发明轮子吗?有没有更简单的方法来实现这一点?

再次,非常感谢任何反馈!


输出:

0 投票
1 回答
1393 浏览

c++ - 无法运行简单的 mpi 程序

我最近安装了 Intel 的 Cluster Studio,并且正在测试 IMPI。当我尝试使用 运行一个简单的 hello world 程序mpirun时,这个过程需要很长时间,我必须自己结束它。我使用了以下代码:

我用mpiicpc main.cpp -o main. 这是我添加-show选项时的输出:

我用mpirun -np 4 main.

附加信息:

更新:我也尝试使用g++而不是编译它icpc。没运气。我的猜测是 MPI 运行时有问题,但我找不到。调试不起作用。我认为程序一开始并没有初始化。

0 投票
0 回答
259 浏览

mpi - 英特尔 MPI_COMM_SPAWN_MULTIPLE 崩溃

MPI_COMM_SPAWN_MULTIPLE使用英特尔 MPI 实现并使用 ifort 编译代码时,我遇到了内部崩溃。相同的代码使用 OpenMPI 并使用 gfortran 编译没有问题。相关代码贴在下面。

0 投票
1 回答
524 浏览

java - 英特尔 MPI mpirun 不使用 java Process.destroy() 终止

我的 Intel MPI 版本是 impi/5.0.2.044/intel64 安装在 RHEL 机器上。

我正在使用 java 使用以下代码调用 MPI 程序:

但是即使在exitValue()没有抛出异常的情况下已知,ps aux仍然显示一堆./myProgram,并且程序仍在写入结果文件,就好像它没有被杀死一样,只有在完成所有计算后才会终止。

目前,我发现成功终止的唯一方法./myProgramCtrl+C将控制台中使用的 java 终止到 java 程序。

我的意图是立即停止计算,让 java 程序安排一些其他的计算。是否有任何解决方法可以强制所有 mpi 实例终止,或者至少保证在小而明确的时间内(例如 30 秒或 1 分钟的轮询)终止?