我想知道如果在MPI程序中指定有线程支持,所有线程都会进行MPI :: Bcast调用(使得在调用中,发送程序只支持一个线程),这是由所有其他线程接收的,还是仅仅来自每个进程的一个线程(最快)?带线程支持和Bcast调用的MPI
1
A
回答
3
常见的MPI实现处理进程之间的通信。支持线程的实现只允许多个线程进行一些或全部MPI调用,而不仅仅是一个。调用MPI_Bcast
的进程中的每个T
线程表示该进程已调用MPI_Bcast
T次,并且期望通信器上的所有其他等级都会执行相同的操作。
1
根据MPI执行中的线程支持级别(请检查,MPI中的线程支持非常简单),每个进程只进行一次MPI调用。
1
要添加到Novelocrat给出了答案:
计算的MPI的基本单位是“等级”。在MPI的大多数(全部)有趣的实现中,等级是一个过程。一个进程中的所有线程共享相同的等级ID。
MPI标准支持多级别的线程并行:MPI_THREAD_SINGLE,MPI_THREAD_FUNNELED,MPI_THREAD_SERIALIZED和MPI_THREAD_MULTIPLE。
其中,只有MPI_THREAD_MULTILE实际上有多个线程将重叠调用插入到MPI库中。另外三种情况是应用程序声称Rank可以被视为“单线程”。欲了解更多信息,请参阅MPI Standard entry on MPI_INIT_THREAD。
相关问题
- 1. MPI Bcast和进程数
- 2. MPI和线程
- 3. 当使用多个进程时MPI Bcast附近的Seg故障
- 4. 用MPI支持编译Valgrind
- 5. 从多线程调用MPI功能
- 6. 如何在MPI中使用未阻止的Bcast?
- 7. 调用从MPI进程调用MPI进程的脚本
- 8. 带有齿轮的Gmail离线支持
- 9. JVM绿色线程支持和操作系统本地线程支持
- 10. mpi和进程调度
- 11. Android不支持的线程
- 12. 支持多线程的arraylist
- 13. DIH支持调用程序
- 14. RestKit iOS应用程序的在线和离线支持
- 15. Gwt和html5多线程/ WebGL支持
- 16. 不支持弃用的线程方法不支持
- 17. 调整由Spring容器的任务支持使用的线程
- 18. P线程在MPI
- 19. 作业线程 - MPI
- 20. 在新线程中调用支持CUDA的库
- 21. Libevent多线程支持
- 22. Adobe Alchemy线程支持
- 23. Clisp支持线程吗?
- 24. Android支持线程吗?
- 25. Webservice支持多线程?
- 26. COM多线程支持
- 27. 如何让CMake构建一个支持MPI的Fortran程序?
- 28. 支持java的SSH库很好的支持多线程!
- 29. 带调用限制的单线程ScheduledThreadPoolExecutor
- 30. 使用带下划线的TypeScript类型支持
新奇事物,这是有道理的。因此,来自不同进程的所有线程都会调用Bcast,这是一场重大的灾难。感谢你的回答。 – SwatchPuppy
Novelocrat,我还有一个问题,想象在启用多线程支持的情况下,在同一个进程中有两个线程,他们可以使用MPI_Send和MPI_Recv在它们之间进行通信,还是会导致死锁? – SwatchPuppy
一个进程可能可能使用Isend/Irecv与自己进行通信,但那会有点愚蠢。请记住,你的流程中的所有线程仍然是同一个MPI级别的一部分。此外,允许“MPI_Send”阻塞,直到匹配的接收完成。如果它本身就是这样,并且没有发布接收,那就是僵局。 – Novelocrat