mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
Add alias dispatch key DefaultBackend. (#45718)
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/45718 Test Plan: Imported from OSS Reviewed By: bhosmer Differential Revision: D24165892 Pulled By: ailzhang fbshipit-source-id: ed28bf62b7c6320d966fd10b7a44b14efffe2f62
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f8b3af21f2
commit
0ddcc0ce35
@ -561,7 +561,7 @@ catchall: default_def_name_t_t :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
''')
|
||||
|
||||
# computed dispatch table is too big, so we only check on a few entries we're interested in.
|
||||
extracted_table = extract_dispatch_table_with_keys(table, dispatch_keys_to_check)
|
||||
extracted_table = extract_dispatch_table_with_keys(table, dispatch_keys_to_check + ('QuantizedCPU',))
|
||||
|
||||
self.assertExpectedInline(extracted_table, '''\
|
||||
CPU: fn_math [math kernel]
|
||||
@ -571,6 +571,113 @@ AutogradOther: ambiguous_autogradother [ambiguous autogradother]
|
||||
AutogradCPU: fn_math [math kernel]
|
||||
AutogradCUDA: fn_math [math kernel]
|
||||
AutogradXLA: fn_math [math kernel]
|
||||
QuantizedCPU: fn_quantizedcpu [kernel]
|
||||
''')
|
||||
|
||||
def test_computed_table_with_cpu_defaultbackend(self):
|
||||
result = self.commute("foo", [
|
||||
# m.def("foo(Tensor x) -> Tensor")
|
||||
lambda m: m.def_("foo(Tensor x) -> Tensor"),
|
||||
# m.impl("foo", torch::kCPU, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "CPU", debug="fn_cpu"),
|
||||
# m.impl("foo", torch::kDefaultBackend, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "DefaultBackend", debug="fn_defaultbackend"),
|
||||
])
|
||||
state, table = result.state, result.table
|
||||
self.assertExpectedInline(state, '''\
|
||||
name: test::foo
|
||||
schema: test::foo(Tensor x) -> (Tensor)
|
||||
debug: registered at /dev/null:0
|
||||
alias analysis kind: FROM_SCHEMA
|
||||
CPU: fn_cpu :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
DefaultBackend[alias]: fn_defaultbackend :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
''')
|
||||
|
||||
# computed dispatch table is too big, so we only check on a few entries we're interested in.
|
||||
extracted_table = extract_dispatch_table_with_keys(table, dispatch_keys_to_check)
|
||||
|
||||
self.assertExpectedInline(extracted_table, '''\
|
||||
CPU: fn_cpu [kernel]
|
||||
CUDA: fn_defaultbackend [default backend kernel]
|
||||
XLA: fn_defaultbackend [default backend kernel]
|
||||
AutogradOther: fallthrough registered in pytorch framework [backend fallback]
|
||||
AutogradCPU: fallthrough registered in pytorch framework [backend fallback]
|
||||
AutogradCUDA: fallthrough registered in pytorch framework [backend fallback]
|
||||
AutogradXLA: fallthrough registered in pytorch framework [backend fallback]
|
||||
''')
|
||||
|
||||
def test_computed_table_with_cpu_autograd_defaultbackend(self):
|
||||
result = self.commute("foo", [
|
||||
# m.def("foo(Tensor x) -> Tensor")
|
||||
lambda m: m.def_("foo(Tensor x) -> Tensor"),
|
||||
# m.impl("foo", torch::kCPU, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "CPU", debug="fn_cpu"),
|
||||
# m.impl("foo", torch::kAutograd, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "Autograd", debug="fn_autograd"),
|
||||
# m.impl("foo", torch::kDefaultBackend, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "DefaultBackend", debug="fn_defaultbackend"),
|
||||
])
|
||||
state, table = result.state, result.table
|
||||
self.assertExpectedInline(state, '''\
|
||||
name: test::foo
|
||||
schema: test::foo(Tensor x) -> (Tensor)
|
||||
debug: registered at /dev/null:0
|
||||
alias analysis kind: FROM_SCHEMA
|
||||
CPU: fn_cpu :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
Autograd[alias]: fn_autograd :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
DefaultBackend[alias]: fn_defaultbackend :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
''')
|
||||
|
||||
# computed dispatch table is too big, so we only check on a few entries we're interested in.
|
||||
extracted_table = extract_dispatch_table_with_keys(table, dispatch_keys_to_check + ('QuantizedCPU',))
|
||||
|
||||
self.assertExpectedInline(extracted_table, '''\
|
||||
CPU: fn_cpu [kernel]
|
||||
CUDA: fn_defaultbackend [default backend kernel]
|
||||
XLA: fn_defaultbackend [default backend kernel]
|
||||
AutogradOther: fn_autograd [autograd kernel]
|
||||
AutogradCPU: fn_autograd [autograd kernel]
|
||||
AutogradCUDA: fn_autograd [autograd kernel]
|
||||
AutogradXLA: fn_autograd [autograd kernel]
|
||||
QuantizedCPU: fn_defaultbackend [default backend kernel]
|
||||
''')
|
||||
|
||||
def test_computed_table_with_cpu_autograd_math_defaultbackend(self):
|
||||
result = self.commute("foo", [
|
||||
# m.def("foo(Tensor x) -> Tensor")
|
||||
lambda m: m.def_("foo(Tensor x) -> Tensor"),
|
||||
# m.impl("foo", torch::kCPU, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "CPU", debug="fn_cpu"),
|
||||
# m.impl("foo", torch::kAutograd, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "Autograd", debug="fn_autograd"),
|
||||
# m.impl("foo", torch::kMath, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "Math", debug="fn_math"),
|
||||
# m.impl("foo", torch::kDefaultBackend, [](const Tensor & x) { return x })
|
||||
lambda m: m.impl_t_t("foo", "DefaultBackend", debug="fn_defaultbackend"),
|
||||
])
|
||||
state, table = result.state, result.table
|
||||
self.assertExpectedInline(state, '''\
|
||||
name: test::foo
|
||||
schema: test::foo(Tensor x) -> (Tensor)
|
||||
debug: registered at /dev/null:0
|
||||
alias analysis kind: FROM_SCHEMA
|
||||
CPU: fn_cpu :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
Autograd[alias]: fn_autograd :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
Math[alias]: fn_math :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
DefaultBackend[alias]: fn_defaultbackend :: (Tensor _0) -> (Tensor _0) [ boxed unboxed ]
|
||||
''')
|
||||
|
||||
# computed dispatch table is too big, so we only check on a few entries we're interested in.
|
||||
extracted_table = extract_dispatch_table_with_keys(table, dispatch_keys_to_check)
|
||||
|
||||
self.assertExpectedInline(extracted_table, '''\
|
||||
CPU: fn_cpu [kernel]
|
||||
CUDA: fn_defaultbackend [default backend kernel]
|
||||
XLA: fn_defaultbackend [default backend kernel]
|
||||
AutogradOther: fn_autograd [autograd kernel]
|
||||
AutogradCPU: fn_autograd [autograd kernel]
|
||||
AutogradCUDA: fn_autograd [autograd kernel]
|
||||
AutogradXLA: fn_autograd [autograd kernel]
|
||||
''')
|
||||
|
||||
# Can't do this yet for BC reasons
|
||||
|
||||
Reference in New Issue
Block a user