mindspore.ops.communication.batch_isend_irecv
- mindspore.ops.communication.batch_isend_irecv(p2p_op_list)[源代码]
批量异步发送和接收张量。
说明
p2p_op_list 中 P2POp 的
"isend"和"irecv"在rank之间需要相互匹配。p2p_op_list 中的 P2POp 只能使用相同的通信组。
p2p_op_list 中 P2POp 的 tag 暂不支持。
p2p_op_list 中 P2POp 的 tensor 不会被结果原地修改。
当前仅支持PyNative模式,不支持Graph模式。
- 参数:
p2p_op_list (list[P2POp]) - 包含 P2POp 的列表。P2POp 的类型为
mindspore.ops.communication.P2POp。
- 返回:
list[CommHandle]。CommHandle是一个异步工作句柄。目前仅支持一个包装句柄。
- 异常:
TypeError - 如果 p2p_op_list 为空或 p2p_op_list 不全是 P2POp 类型。
TypeError - p2p_op_list 中的组名不一致。
TypeError - p2p_op_list 中的 tensor 不是Tensor。
TypeError - p2p_op_list 中的 op 不是isend或irecv。
- 支持平台:
Ascend
样例:
>>> import numpy as np >>> import mindspore >>> from mindspore.ops.communication import init_process_group, get_rank, get_world_size >>> from mindspore.ops.communication import batch_isend_irecv, P2POp >>> from mindspore import Tensor >>> >>> init_process_group() >>> this_rank = get_rank() >>> world_size = get_world_size() >>> next_rank = (this_rank + 1) % world_size >>> prev_rank = (this_rank + world_size - 1) % world_size >>> >>> send_tensor = Tensor(this_rank + 1, dtype=mindspore.float32) >>> recv_tensor = Tensor(0., dtype=mindspore.float32) >>> >>> send_op = P2POp('isend', send_tensor, next_rank) >>> recv_op = P2POp('irecv', recv_tensor, prev_rank) >>> >>> p2p_op_list = [send_op, recv_op] >>> output = batch_isend_irecv(p2p_op_list) >>> print(recv_tensor) rank 0: 2.0 rank 1: 1.0