#pragma once #include #include #include namespace at { // If an operator doesn't have a batching rule implemented then we fallback // to this implementation. The fallback only works on out-of-place operators // that return only tensors with new memory. (e.g., no in-place operators, no // view operations). // // The fallback effectively takes all of the BatchedTensors in `stack`, slices // them, and runs `op` on all of the corresponding slices to produce slices // of the outputs. The output slices then get `torch.stack`ed to create the // final returns. // // The performance of the fallback is not very good because it introduces an // extra copy from stacking the sliced outputs. Because of this, we prefer to // write batching rules for operators whenever possible. void batchedTensorForLoopFallback( const c10::OperatorHandle& op, torch::jit::Stack* stack); } // namespace at