一个进程可以向自己发送数据吗?使用 MPICH2
Is a process can send to himself data? Using MPICH2
我有一个上三角矩阵和结果向量b。我的程序需要求解线性系统:
斧头 = b
使用管道方法。其中一个约束是进程的数量小于进程的数量方程(假设它可以是从 2 到数字方程-1)。
我现在没有代码,我正在考虑伪代码。
我的想法是其中一个过程将创建随机的上三角矩阵(A)向量 b.假设这是随机矩阵:
1 2 3 4 5 6
0 1 7 8 9 10
0 0 1 12 13 14
0 0 0 1 16 17
0 0 0 0 1 18
0 0 0 0 0 1
向量 b [10 5 8 9 10 5]
而且我的过程数量比方程的数量少(假设 2 个过程)
所以我的想法是,某个过程将从矩阵发送到每个过程行,并从向量 B 发送到相关数字。
所以矩阵的最后一行和向量 B 中的最后一个数字将被发送到进程[numProcs-1](这里我的意思是最后一个进程(进程1))比他计算 X 并将结果发送到进程 0。
现在进程 0 需要计算矩阵的 5 行,在这里我卡住了。.我有由进程 1 计算的 X,但是进程如何发送给自己矩阵的下一行和向量 B 中的相关数字需要计算?
可能吗?我认为发送给"我自己"是不对的
是的,MPI 允许进程将数据发送到自身,但在使用阻塞操作时必须格外小心可能的死锁。在这种情况下,通常将非阻塞发送与阻塞接收配对,反之亦然,或者使用像 MPI_Sendrecv
这样的调用。向自己发送消息通常最终只是将消息从源缓冲区内存复制到目标缓冲区,而不涉及网络或其他重型机械。
不,与自己交流不一定是一件坏事。最明显的好处是,它使代码更加对称,因为它删除/减少了处理自交互所需的特殊逻辑。在大多数集体通信调用中,向自己发送/从自身接收也会发生。例如,MPI_Scatter
还会将部分数据发送到根进程。为了防止一些不必要地复制数据并降低性能的发送到自身的情况,MPI允许大多数与通信相关的集合体就地模式(MPI_IN_PLACE
)。
可能吗?我认为发送给"我自己"是不对的
当然,可以与自己交流。甚至还有一个沟通者:MPI_COMM_SELF。自言自语并不少见。您的设置听起来像您更愿意使用 MPI 集合。看看MPI_Scatter和MPI_Gather,看看它们是否没有为您提供您正在寻找的功能。
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 一个进程可以向自己发送数据吗?使用 MPICH2