[ExecuTorch][WebGPU] Add aten._to_copy.default with int<->float numeric convert#20987
[ExecuTorch][WebGPU] Add aten._to_copy.default with int<->float numeric convert#20987JCNTH wants to merge 2 commits into
Conversation
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/20987
Note: Links to docs will display an error until the docs builds have been completed. ❌ 128 New Failures, 3 Unrelated Failures, 7 Unclassified FailuresAs of commit b82a606 with merge base c2b273e ( NEW FAILURES - The following jobs have failed:
UNCLASSIFIED FAILURES - DrCI could not classify the following jobs because the workflow did not run on the merge base. The failures may be pre-existing on trunk or introduced by this PR:
FLAKY - The following jobs failed but were likely due to flakiness present on trunk:
BROKEN TRUNK - The following job failed but were present on the merge base:👉 Rebase onto the `viable/strict` branch to avoid these failures
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
This PR needs a
|
Stack from ghstack (oldest at bottom):
Add
aten._to_copy.defaultwith int↔float numeric convertProblem: The copy-family ops byte-copied across dtypes, so an int32 -> fp32 cast reinterpreted the raw bits — int32
2=0x2decodes as the fp32 denormal2.8e-45— producing wrong values (and div-by-~0infdownstream). Separately,aten._to_copy.defaultwas unregistered, so any delegate containing it failed to load.Solution: Add
add_to_copy_node: same-dtype copies stay a flat byte copy, while int<->float copies run a numeric-convert compute shader (f32(i32)/i32(f32)). Registeraten._to_copy.default, and route the dim-order copy ops (dim_order_ops._clone_dim_order.default/._to_dim_order_copy.default) through the same convert-aware path so an int<->float dim-order copy numeric-converts instead of byte-reinterpreting;view_copy/clone/alias_copystay on the flat copy. Mirrors VulkanToCopy.cpp(BlitNode vs the view_convert path).Implementation:
runtime/ops/to_copy/{ToCopy.cpp,to_copy.h,to_copy_int_to_float.wgsl,to_copy_float_to_int.wgsl}provideadd_to_copy_nodeand registeraten._to_copy.default;runtime/ops/view_copy/ViewCopy.cppre-points the two dim-order copy ops atadd_to_copy_node. OneWEBGPU_SRCSentry.Constraints: 32-bit only (int64 constants are downcast to int32 by the Vulkan serializer); fails loud on any other element width.
Co-authored-with: Claude Code.
Differential Revision: D112378932