我已经阅读了这些术语的定义,我的解释是团体和沟通者之间存在一对一的关系.组是希望彼此通信的一组进程,并且通信器是组的实现.
它是否正确?如果是这样,为什么有两个不同的术语?
我正在使用SMP超级计算机上的MPI程序.我想确定哪些进程共享同一节点,例如通过设置在同一节点上的所有进程中相等的整数键,以及从节点到另一个节点的不同.然后,目标是使用该密钥来分割通信器并使子通信器仅收集同一节点中的进程.
所以函数看起来像
int identify_node(MPI_Comm* comm); // returns a key characterizing a node
Run Code Online (Sandbox Code Playgroud)
假设node_1上的0,1,2,3,node_2上的4,5,6,7等过程的简单分布,这是一个简单公式的问题,但我希望在没有假设的情况下实现相同的结果关于分配.
我有一个想法如何使用MPI_Get_processor_name来做到这一点:通过计算名称的哈希并假设没有两个名称将获得相同的哈希(我不喜欢这样,因为如果有一天我有两个具有相同哈希的名称,它将难以跟踪问题),或跨进程使用某种协议算法(哪一个?我还不知道).
你会怎么做(尽可能有效)?
马蒂厄
我发现了一个名为MPI_COMM_SELF的MPI通信器.问题是,我不知道,什么时候有用.在我看来,只有每个过程都"认为"自己是根.
你能解释一下我究竟是如何MPI_COMM_SELF工作的,以及它在哪些情况下有用?
我发现了这个幻灯片,但是那里只是简单地提到了传播者.
我已经尝试过这个"Hello,world"示例,并且所有进程都返回0作为它们的PID.
#include <mpi.h>
#include <stdio.h>
int main() {
MPI_Init(NULL, NULL);
int world_rank;
MPI_Comm_rank(MPI_COMM_SELF, &world_rank);
printf("Hello, my PID is %d!\n",
world_rank);
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想就这个主题寻求一些指导,即通过 .NET C# 实现通过 AS2 或 AS3 通信协议发送和接收文件。我搜索了有关如何实现此通信层以发送和接收 EDI 文档以及其他类型文档的示例或解释。我已经构建了自己的 EDI 文档生成器和阅读器。它与我的电子商务系统相关联。我们与 VCommerce 和 CommerceHUB 合作多年。我似乎找不到太多关于 AS2 通信层的实现的信息。我意识到所有这一切的第二部分是生成用于加密和解密的证书,但我想我对如何实现这一点有一个想法,或者如果可能的话只是手动创建证书。你们能指出任何可以向我展示用于发送 HTTP 消息的标准示例或类似内容的内容吗?到目前为止,我一直将 /n 软件用于通信部分,但我真的很想自己这样做,以便 100% 集成。对于只需要服务器的任何人来说,它们都很棒而且物有所值。非常稳定且易于实施。对我来说,我已经超越了能够使用它们的能力,需要建立自己的。
非常感谢您的帮助。
我有一个与MPI并行化的应用程序,它分为许多不同的任务。每个处理器仅分配一个任务,而分配了相同任务的处理器组则分配有它自己的通信器。任务需要定期进行同步。当前,同步是通过MPI_COMM_WORLD完成的,但是它的缺点是无法使用集体操作,因为不能保证其他任务将到达该代码块。
作为更具体的示例:
task1: equation1_solver, N nodes, communicator: mpi_comm_solver1
task2: equation2_solver, M nodes, communicator: mpi_comm_solver2
task3: file IO , 1 node , communicator: mpi_comm_io
Run Code Online (Sandbox Code Playgroud)
我想在task1上使用MPI_SUM一个数组,并将结果显示在task3上。有一种有效的方法可以做到这一点吗?(如果这是一个愚蠢的问题,我深表歉意,我在创建和使用自定义MPI通信器方面没有太多经验)
我想在群集的每台机器上轻松地执行集体通信.假设我有4台机器,每台机器有8个核心,我的mpi程序将运行32个MPI任务.对于给定的功能,我想要的是:
从概念上讲,我理解我必须为每个主机创建一个通信器.我四处搜索,没有发现任何明确的事情.我对MPI小组和传播者感到不舒服.这是我的两个问题: