问题标签 [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.
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)链接?
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 模型,我的代码会更容易吗?
parallel-processing - 指定 MPI 用户
可能重复:
将 MPI 主机文件配置为使用多个用户身份
有谁知道可以通过mpirun指定必须在与给定主机或 MPI 执行中的主机列表的特定ssh连接中使用的用户?我需要在不同的节点中使用不同的用户。
linux - MPI_SEND 占用大量虚拟内存
在大量内核上调试我的程序时,我遇到了非常奇怪的insufficient virtual memory
. 我的调查导致代码和平,主人向每个奴隶发送小消息。然后我写了一个小程序,其中 1 个 master 简单地发送 10 个整数,MPI_SEND
所有的 slave 用MPI_RECV
. /proc/self/status
之前和之后的文件比较MPI_SEND
显示,内存大小之间的差异是巨大的!最有趣的事情(这使我的程序崩溃)是该内存不会在之后释放MPI_Send
并且仍然占用大量空间。
有任何想法吗?
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 位置...
mpi - 在不同的通信器中收到 MPI 消息
据我了解,MPI 通信器限制了通信范围,因此从一个通信器发送的消息永远不会在另一个通信器中接收。
然而,下面内联的程序似乎与此相矛盾。
我知道MPI_Send
调用在发布匹配接收之前返回,因为它在引擎盖下进行了内部缓冲(而不是MPI_Ssend
)。我也明白这MPI_Comm_free
不会立即破坏通信器,而只是将其标记为释放并等待任何挂起的操作完成。我想我不匹配的发送操作将永远挂起,但是我想知道为什么同一个对象(整数值)会被第二个通信器重用!?
这是正常行为,MPI 库实现中的错误,还是我的程序不正确?
任何建议都非常感谢!
后期编辑:发布后续问题
输出:
error-handling - 在不同的通信器中收到 MPI 消息 - 错误的程序或 MPI 实现错误?
这是我之前的问题的后续,其结论是程序错误,因此预期的行为是未定义的。
我在这里尝试创建的是一个简单的错误处理机制,为此我将针对空消息的 Irecv 请求用作“中止句柄”,将其附加到我的正常MPI_Wait
调用(并将其转换为MPI_WaitAny
),以便允许我取消阻止进程 1,以防进程 0 发生错误并且它无法再到达应该发布匹配的点MPI_Recv
。
发生的事情是,由于内部消息缓冲,MPI_Isend
可能会立即成功,而其他进程无法发布匹配的MPI_Recv
. 所以没有办法取消它了。
我希望一旦所有进程调用,MPI_Comm_free
我就可以一劳永逸地忘记该消息,但事实证明,情况并非如此。相反,它被传递到MPI_Recv
以下通信器中。
所以我的问题是:
- 这也是一个错误的程序,还是 MPI 实现(英特尔 MPI 4.0.3)中的一个错误?
- 如果我把我的
MPI_Isend
电话变成MPI_Issend
,程序按预期工作 - 我至少在这种情况下可以放心程序是正确的吗? - 我在这里重新发明轮子吗?有没有更简单的方法来实现这一点?
再次,非常感谢任何反馈!
输出:
c++ - 无法运行简单的 mpi 程序
我最近安装了 Intel 的 Cluster Studio,并且正在测试 IMPI。当我尝试使用 运行一个简单的 hello world 程序mpirun
时,这个过程需要很长时间,我必须自己结束它。我使用了以下代码:
我用mpiicpc main.cpp -o main
. 这是我添加-show
选项时的输出:
我用mpirun -np 4 main
.
附加信息:
更新:我也尝试使用g++
而不是编译它icpc
。没运气。我的猜测是 MPI 运行时有问题,但我找不到。调试不起作用。我认为程序一开始并没有初始化。
mpi - 英特尔 MPI_COMM_SPAWN_MULTIPLE 崩溃
MPI_COMM_SPAWN_MULTIPLE
使用英特尔 MPI 实现并使用 ifort 编译代码时,我遇到了内部崩溃。相同的代码使用 OpenMPI 并使用 gfortran 编译没有问题。相关代码贴在下面。
java - 英特尔 MPI mpirun 不使用 java Process.destroy() 终止
我的 Intel MPI 版本是 impi/5.0.2.044/intel64 安装在 RHEL 机器上。
我正在使用 java 使用以下代码调用 MPI 程序:
但是即使在exitValue()
没有抛出异常的情况下已知,ps aux
仍然显示一堆./myProgram
,并且程序仍在写入结果文件,就好像它没有被杀死一样,只有在完成所有计算后才会终止。
目前,我发现成功终止的唯一方法./myProgram
是Ctrl+C
将控制台中使用的 java 终止到 java 程序。
我的意图是立即停止计算,让 java 程序安排一些其他的计算。是否有任何解决方法可以强制所有 mpi 实例终止,或者至少保证在小而明确的时间内(例如 30 秒或 1 分钟的轮询)终止?