| 155 | } |
| 156 | |
| 157 | ValueRefList remote_recv_rule( |
| 158 | const RemoteRecv& remote_recv, Span<ValueRef> inputs, Span<bool> inputs_mask, |
| 159 | const Type<ScalarValue>& scalar_type) { |
| 160 | if (remote_recv.shape.empty()) { |
| 161 | std::vector<int32_t> shape = {1}; |
| 162 | auto remote_recv_no_scalar = RemoteRecv::make( |
| 163 | remote_recv.key, remote_recv.addr, remote_recv.port, |
| 164 | remote_recv.rank_from, remote_recv.cn, shape, remote_recv.dtype, |
| 165 | remote_recv.backend); |
| 166 | remote_recv_no_scalar->set_scope(remote_recv.scope()); |
| 167 | return imperative::apply(ApplyOp(*remote_recv_no_scalar), inputs); |
| 168 | } else { |
| 169 | return imperative::apply(remote_recv, inputs); |
| 170 | } |
| 171 | } |
| 172 | |
| 173 | ValueRefList check_no_finite_rule( |
| 174 | const CheckNonFinite& check_no_finite, Span<ValueRef> inputs, |