gpt4 book ai didi

c - 如何使具有两个线程的两个进程在MPI中相互接收、发送?

转载 作者:行者123 更新时间:2023-11-30 15:58:02 27 4
gpt4 key购买 nike

基本上我想实现这样的目标:

Process 1
Thread 1
Receive X from process 2
Thread 2
Receive Y from process 2
Process 2
Thread 1
Send X to process 1
Thread 2
Send Y to process 1

在带有 pthreads 库的 C 语言 MPI 中。
我已经在 PVM 中做到了,这是源代码:
master.c:http://pastebin.com/wwEie7gn ,
从机.c:http://pastebin.com/gfeCkcss .
我尝试做的事情:
程序.c:http://pastebin.com/tCVKN3fe
不知何故,接收器线程没有收到任何东西。我不知道问题是什么。我希望有人能告诉我正确的方法。
我正在运行没有线程支持的 MPI 编译。

最佳答案

您想对两条消息使用不同的标签,例如您可以使用接收者线程的(已知?)ID 来标记消息。然后,进程 1 中的每个线程都会以其 ID 作为标记来发布接收,并且该接收将仅与定向到该特定线程的消息匹配。

请注意,MPI 2.2 提供与线程的有限互操作性。默认情况下,大多数 MPI 实现都不是线程安全的。例如,开放 MPI 要求在配置期间显式启用完整线程支持(默认情况下禁用)。您至少需要具有 MPI_Thread_init(或 MPI_Query_thread)的 provided 参数中返回的 MPI_THREAD_SERIALIZED 线程级别为了能够在不同的线程中进行 MPI 调用。如果您的 MPI 库仅提供 MPI_THREAD_SINGLEMPI_THREAD_FUNNELED 级别,那么您就不走运了,无法在主线程以外的地方进行 MPI 调用。如果提供的级别是 MPI_THREAD_SERIALIZED ,那么您可以从任何线程进行 MPI 调用,但您必须显式序列化这些调用,即确保不会同时进行两个或多个调用(例如,对于关键部分)或互斥体)。如果提供的级别是MPI_THREAD_MULTIPLE,那么您就拥有完整的多线程支持,并且可以在任何时间点从任何线程进行 MPI 调用。

关于c - 如何使具有两个线程的两个进程在MPI中相互接收、发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com