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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eh that is a surprising need. How does one obtain a
CuDeviceonly using KA primitives?That's why
KA.devicereturns an ordinal and not a complex object.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes me think about the ordinality of
KA.device. Oceananigans has functions that are only called withdevices()as an argument or dispatch on the device type. No data, no backend. In addition, they implement this API:Now, the solution would be to add the backend as an argument. However, CUDA provides
device(::CuPtr)etc, that they use and might useful. Add aget_backend(::CuPtr)for those? What do you think?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Curiously, CUDA implements
CUDA.device(::Ptr).There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am ok, with get_backend(ptr) that extends well to other back ends (which is always the Crux).
device(data)is an odd and increasingly ill formed query. (An array can be spread across multiple devices) So I would look very closely at those usages and how they generalize.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FWIW, that (and
CUDA.device(::CuPtr)) are fairly specific, almost internal APIs. Not exported from CUDAdrv, but because of historical reasons it aliases with the exporteddevicefunction that's much more commonly used. I may deprecate it at some point and replace it with a properties dictionary.All not too relevant here, I just want to say that I wouldn't let it drive any decision.