mindspore.communication.comm_func.batch_isend_irecv
- mindspore.communication.comm_func.batch_isend_irecv(p2p_op_list)[源代码]
异步地发送和接收张量。
说明
不同设备中, p2p_op_list 中的 P2POp 的
"isend
和"irecv"
应该互相匹配。p2p_op_list 中的 P2POp 应该使用同一个通信组。
暂不支持 p2p_op_list 中的 P2POp 含有 tag 入参。
p2p_op_list 中的 P2POp 的 tensor 的值不会被最后的结果原地修改。
仅支持PyNative模式,目前不支持Graph模式。
- 参数:
p2p_op_list (P2POp) - 包含 P2POp 类型对象的列表。 P2POp 指的是
mindspore.communication.comm_func.P2POp
。
- 返回:
Tuple(Tensor)。根据 p2p_op_list 中的 P2POp 的发送/接收顺序,得到的接收张量元组。 当 P2POp 为发送时, 相应位置的结果是没有意义的张量。 当 P2POp 为接收时, 相应位置的结果是从其他设备接收到的张量。
- 异常:
TypeError - p2p_op_list 中不全是 P2POp 类型。
- 支持平台:
Ascend
样例:
>>> import numpy as np >>> import mindspore >>> from mindspore.communication import init, get_rank, get_group_size >>> from mindspore.communication.comm_func import batch_isend_irecv, P2POp >>> from mindspore import Tensor >>> >>> init() >>> this_rank = get_rank() >>> world_size = get_group_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(output) rank 0: (Tensor(shape=[], dtype=Float32, value= 0), Tensor(shape=[], dtype=Float32, value= 2)) rank 1: (Tensor(shape=[], dtype=Float32, value= 0), Tensor(shape=[], dtype=Float32, value= 1))