Repository navigation
Conversation
Store the image shape on RadonOpImpl and rebuild the operator through the RadonOp constructor for the target storage. Array angles and attenuation maps are adapted to the target; ranges, scalar attenuation, and the geometry are kept. Also give the FFTOp DiagOp compound test distinct children, since DiagOp evaluates them in parallel and a shared FFTOp races on its plan buffer under multiple threads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adapt the DiagOp with the same FFTOp twice, assert the adapted children have independent plans and workspaces, and compare against applying the source to each block in turn, which avoids the parallel race on the shared source child. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #45 +/- ##
==========================================
+ Coverage 73.01% 73.15% +0.13%
==========================================
Files 15 15
Lines 593 596 +3
==========================================
+ Hits 433 436 +3
Misses 160 160 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Contributor
Author
|
GPU CI (Buildkite #170) is green on both CUDA and ROCm for |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR fixes
RadonOpImplhas no Adapt rule, soAdapt.adapt(target, op)cannot move a Radon operator to another storage backend. Its workspaces are built from the constructor'sS, the attenuation mapμis read inside the RadonKA kernels and must live on the image backend, and the image shape is only captured by the product closures, so it cannot be recovered from the operator's fields.How it fixes it
RadonOpImplnow stores the imageshape(2-D or 3-D) as a field.Adapt.adapt_structure(to, ::RadonOpImpl)rebuilds the operator through the publicRadonOpconstructor with target storageS, the stored shape and the originalgeometry.anglesandμgo throughAdapt.adapt: arrays move to the target, while ranges, scalarμandnothingare kept. RadonKA re-uploadsanglesand the geometry to the image backend on every call, so only arrayμmust already be on the target.ArgumentErrorthrough the shared target check, as for the other operators.angles/μarrays may be shared with the source, as the constructor already stores them as passed. A different backend copies them.DiagOp((source, source))compared against the sourceDiagOp, which runs the shared child on both blocks in parallel and races with more than one thread. It now compares against applying the source to each block in turn, and asserts that the adapted children have independent plans and workspaces.Validation
Julia 1.10 package test suite: 845 passed, 9 explicitly broken. New tests cover
ArrayandJLArraytargets for a 2-D operator with a non-default geometry (checked againstradon/backprojectdirectly), a 3-D operator with range angles, and array and scalar attenuation. They assert target storage, fresh workspaces, the carried-over shape and geometry, source immutability and cross-backend isolation. Forward/adjoint products match the source atrtol=1e-5on CPU. OnJLArray, RadonKA callsKernelAbstractions.synchronize, which the JLArrays backend does not implement, so those products are marked broken. The remaining broken case is the existing NonuniformFFTs + JLArray gap.GPU CI results will be reported separately. No Metal lane is claimed.