https://github.com/juliagpu/adapt.jl
https://github.com/juliagpu/adapt.jl
gpu julia
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/juliagpu/adapt.jl
- Owner: JuliaGPU
- License: other
- Created: 2017-12-21T18:54:57.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-03-14T08:10:57.000Z (2 months ago)
- Last Synced: 2025-04-01T12:07:40.019Z (about 2 months ago)
- Topics: gpu, julia
- Language: Julia
- Size: 140 KB
- Stars: 105
- Watchers: 4
- Forks: 27
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Adapt
| **Build Status** | **Coverage** |
|:-----------------------------------------------------:|:-------------------------------:|
| [![][ci-img]][ci-url] [![][pkgeval-img]][pkgeval-url] | [![][codecov-img]][codecov-url] |[ci-img]: https://github.com/JuliaGPU/Adapt.jl/workflows/CI/badge.svg
[ci-url]: https://github.com/JuliaGPU/Adapt.jl/actions?query=workflow:CI[pkgeval-img]: https://juliaci.github.io/NanosoldierReports/pkgeval_badges/A/Adapt.svg
[pkgeval-url]: https://juliaci.github.io/NanosoldierReports/pkgeval_badges/A/Adapt.html[codecov-img]: https://codecov.io/gh/JuliaGPU/Adapt.jl/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/JuliaGPU/Adapt.jlThe `adapt(T, x)` function acts like `convert(T, x)`, but without the
restriction of returning a `T`. This allows you to "convert" wrapper types like
`Adjoint` to be GPU compatible (for example) without throwing away the wrapper.For example:
```julia
adapt(CuArray, ::Adjoint{Array})::Adjoint{CuArray}
```New wrapper types like `Adjoint` should overload `adapt_structure(T, ::Adjoint)`
(usually just to forward the call to `adapt`):```julia
Adapt.adapt_structure(to, x::Adjoint) = Adjoint(adapt(to, parent(x)))
```A similar function, `adapt_storage`, can be used to define the conversion
behavior for the innermost storage types:```julia
adapt_storage(::Type{<:CuArray}, xs::AbstractArray) = convert(CuArray, xs)
```Implementations of `adapt_storage` will typically be part of libraries that use
Adapt. For example, CUDA.jl defines methods of
`adapt_storage(::Type{<:CuArray}, ...)` and uses that to convert different kinds
of arrays, while CUDAnative.jl provides implementations of
`adapt_storage(::CUDAnative.Adaptor, ...)` to convert various values to
GPU-compatible alternatives.Packages that define new wrapper types and want to be compatible with packages
that use Adapt.jl should provide implementations of `adapt_structure` that
preserve the wrapper type. Adapt.jl already provides such methods for array
wrappers that are part of the Julia standard library.