mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
used guard_or_false instead of guard_size_oblivious inside maybe_reduce (#154172)
This was added in https://github.com/pytorch/pytorch/pull/119562 the idea in this loop seems to be the following. ``` if (TORCH_GUARD_SIZE_OBLIVIOUS(size.sym_eq(1))) { // NB: we could short circuit this once needs_reduce is true but there's // no point since the reduction function will guard on this anyway if (!c10::guard_or_false(size.sym_eq(target), __FILE__, __LINE__)) { needs_reduce = true; } } else { if (!size.sym_eq(target).expect_true(__FILE__, __LINE__)) { fail(); } } ``` 1. if we know size ==1 1.1 : if we know for sure size == target --> no reduce needed. 1.2 : we know for sure that size != target --> we do reduction. 1.3: we could not tell if size == target or not --> we do reduction. 2. if we do now know if size ==1 or not we add a runtime assertions that size ==target and we fail at runtime if size is not equal to target. We could have simplified 1.1 and always do reduction under 1.1, since doing 1.3 without runtime checks implies that it is safe, but i feel the reason could be perf here? idk. anyway using TORCH_GUARD_OR_FALSE instead of TORCH_GUARD_SIZE_OBLIVIOUS here is appropriate. there is really no clear reason for size oblivious reasoning. or for this logic not to apply when size is not size like size is always >=0 anyway. but bad reasoning can make us not able to infer that although we know its true here. python test/dynamo/test_misc.py -k test_validate_outputs_unbacked Pull Request resolved: https://github.com/pytorch/pytorch/pull/154172 Approved by: https://github.com/bobrenjc93 ghstack dependencies: #154154, #154164, #154167
This commit is contained in:
committed by
PyTorch MergeBot
parent
ab5137b048
commit
e33feddb72
@ -91,7 +91,7 @@ at::Tensor InputMetadata::maybe_reduce(
|
||||
const auto& target = desired[target_dim - i - 1];
|
||||
// The conditions here are written carefully so that we are able to
|
||||
// infer deferred runtime asserts
|
||||
if (TORCH_GUARD_SIZE_OBLIVIOUS(size.sym_eq(1))) {
|
||||
if (TORCH_GUARD_OR_FALSE(size.sym_eq(1))) {
|
||||
// NB: we could short circuit this once needs_reduce is true but there's
|
||||
// no point since the reduction function will guard on this anyway
|
||||
if (!c10::guard_or_false(size.sym_eq(target), __FILE__, __LINE__)) {
|
||||
|
Reference in New Issue
Block a user