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
CuDevice
only using KA primitives?That's why
KA.device
returns 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 exporteddevice
function 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.