问题标签 [openmpi]
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基础课程
嗨,我想学习在 C 中使用 MPI。我在 Windows 7 上使用 Codeblocks
我运行了这个程序:
但由于某种原因,我在“mpi.h”处收到错误消息。有没有办法添加库?
c++ - MPI_Barrier doesn't function properly
I wrote the C application below to help me understand MPI, and why MPI_Barrier() isn't functioning in my huge C++ application. However, I was able to reproduce my problem in my huge application with a much smaller C application. Essentially, I call MPI_Barrier() inside a for loop, and MPI_Barrier() is visible to all nodes, yet after 2 iterations of the loop, the program becomes deadlocked. Any thoughts?
The output:
I am using GCC 4.4, Open MPI 1.3 from the Ubuntu 10.10 repositories.
Also, in my huge C++ application, MPI Broadcasts don't work. Only half the nodes receive the broadcast, the others are stuck waiting for it.
Thank you in advance for any help or insights!
Update: Upgraded to Open MPI 1.4.4, compiled from source into /usr/local/.
Update: Attaching GDB to the running process shows an interesting result. It looks to me that the MPI system died at the barrier, but MPI still thinks the program is running:
Attaching GDB yields an interesting result. It seems all nodes have died at the MPI barrier, but MPI still thinks they are running:
Update: I also have this code:
And despite the infinite loop, there is only one output from the printf() in the loop:
Any thoughts?
multithreading - 什么可能导致 MPI 非阻塞消息的不对称吞吐量?
我正在使用 MPI 非阻塞消息在 2 个任务之间进行通信。通信模式如下:每个任务都有一个从其他任务接收消息的主线程。它有 5 个左右的工作线程来进行计算并向其他任务发送消息。主线程循环,测试传入消息。这是它唯一做的事情。
我的问题是,虽然任务 0 瞬间接收到任务 1 发送的所有信息(发送和接收的消息数量大致匹配),但任务 1 只接收到任务 0 发送的消息的大约 1/4。运行一分钟后,有数百个数以千计的未完成消息。
使用 PAPI,我确定任务 1 似乎阻止了测试和 irecv。指令吞吐量仅为 0.03 instr/cycle,而其他任务则 > 0.2,并且在调试器中停止任务表明它正在尝试获取锁。但是,阻塞的接收和测试不是针对“丢失”消息的,而是针对另一类更罕见的消息。
我意识到如果不实际尝试代码,很难说出可能导致这种情况的原因,但我发现 MPI 性能存在如此不对称令人费解。跟不上接收的任务并不是因为缺乏尝试,它实际上是把所有的时间都花在测试传入的消息上。
我正在使用带有 MPI_THREAD_MULTIPLE 的 OpenMPI 1.5.3,并且通信是通过 sm 进行的(这两个任务在同一个节点上)。
任何如何追踪这一点的想法将不胜感激。
python - 在mac中安装mpi4py
我正在尝试在 mac 上安装 mpi4py,但遇到以下错误:
搜索 mpi4py
请注意,我之前安装了 openmpi。
任何机构都知道解决方案是什么?
c - MPI_Allgather 产生不一致的结果
在大型软件的一部分中,我遇到了 MPI_Allgather 的问题。
下面的函数在每个节点上传递一个不同的双精度和相关标志,然后该函数应该找到全局最小双精度,并将所有节点设置为相应的值。
我目前在 6 个节点上运行它,我发现以下错误仅发生在节点 5(它的 dt 值最小)上:
- 的真实值
gathered[0]
被替换为gathered[2]
- 的真实值
gathered[1]
被替换为gathered[3]
我认为这可能与 MPI_COMM_WORLD 有关,因为可能会调用 MPI_Comm_Split(); 但是,到目前为止,我还不明白那部分代码。
有人有想法么?
- 编辑:更新了问题以反映我们实际上需要保留一个也与之相关的标志dt
- 这意味着@suszterpatt 建议对我最初的问题很有用,但实际上不会起作用(我不认为)为了这。
eclipse - 如何在 minGW 中使用 MPI(openMPI 或 MPICH2) - GNU gfortran 编译器
我正在使用 eclipse PTP IDE 开发 MPI 代码,我希望能够在 windows 上编译 MPI,它似乎提供了 c++ 和 c 绑定,但我正在使用 fortran 和 gfortran 编译器编写并希望在 windows 中工作,当前的问题在 linux 上不存在,因为可以在 linux 中本地编译库并使用 .mod 模块。
我想使用 cygwin 编译模块,但是 cygwin 上的 GNU gfortran 版本太旧了,我在使用 miniGW 的 windows 上没有成功 openMPI 或 MPICH2
有什么建议么?也许在 fortran 2003 中使用 c++ 绑定,我在 fortran 2003 中编写代码,因此它支持此功能。
缺乏有关此问题的文档。
谢谢你。
mpi - LAM MPI 和 OpenMPI 的区别
我想知道这两个是如何相互关联的。有人可以在这里解释吗?
干杯。
segmentation-fault - OpenMPI 不允许在任何相应的非阻塞原语之前调用 MPI_Wait?
我的应用程序与 LAM/MPI 一起工作,但它与 OpenMPI 一起崩溃。
下面是我的代码的外观。
如您所见,在函数开始时,调用 MPI_Wait,然后进行一些计算,最终在函数结束时调用相应的 MPI_ISend。
每次使用 OpenMPI 运行时,我都会从 MPI_Wait 中不断收到分段错误。
我通过检查函数是否是第一次使用布尔变量*first_time*调用来解决此问题,如下所示。
这里有人知道这个错误吗?
干杯。
c++ - --with-memory-manager=none 用于 mpi 编译的标志
通常,当我想用 mpicc 编译源代码时,我使用以下命令:
但是,我在编译当前源代码时遇到了一些麻烦,一些段错误。我在一个论坛上发现我的问题是由 openmpi 错误引起的,可以通过添加以下标志在一定程度上解决这个问题:--with-memory-manager=none。带有这个标志的编译命令应该是什么样子。我已经尝试了几种方法,但似乎无法识别该命令。请你帮助我好吗。谢谢
parallel-processing - #pragma for 末尾的隐式障碍
朋友们,我正在努力学习 openMP 范式。我使用以下代码来理解 #omp for pragma。
}
在上面的代码中,#pragma omp parallel 的末尾有一个隐式屏障,这意味着所有线程 0、1、2、3、4 必须到达那里才能进入下一条语句。
所以,为了检查这个障碍,我在条件 if(tid!=0) 中包含了这个“pragma for”,这意味着除了线程 0 (即 1、2、3、4)之外的所有线程都应该在循环中完成它们的工作并等待线程 0无限期地。但是,令我惊讶的是,这并没有发生。每个线程都在进行迭代并成功完成。即 t1 完成迭代 5,6,7,8 ---- t2 完成 9,10,11,12 ---- t3 完成 13,14,15,16 和 t4 完成 17,18,19,20。请注意:迭代 1、2、3、4 从未完成。
为了更深入地挖掘,我在 tid!=1 中包含了相同的 #pragma for in tid!=1,而不是 tid!=0,意思是 thread0,thread1 绕过了障碍。令我惊讶的是,程序现在挂起,所有线程都在等待 thread1。
有人可以告诉我这种意外行为的解释。挂起的最终代码:
}
我尝试设置我共享或私有,但它并没有改变程序的行为。