Release: CUDAnative/CUDAdrv 1.0; CuArrays 0.9

We’ve just released a big update of the Julia CUDA GPU stack, not specifically because of shiny new features, but because of the packages being stuck due to an unfortunate version dependency issue that should be resolved now. As a result, we’re unleashing a wide range of structural changes that may very well break your code. I’ve tried to add version bounds where possible though, so the stack itself should behave as expected on Julia 1.0 and 1.1.

For Flux.jl users, a tag is imminent but you can already use the master branch which should be compatible with the latest CuArrays.jl.

CuArrays.jl has gained a wrapper for CUSPARSE (thanks @kshyatt!) as well as various improvements across the stack. Some notable changes include: use of Adapt.jl for device conversions, a CURAND interface that mimics Base.Random, and many multi-device improvements. One possible breaking change concerns the CuArray constructors, which should now behave like Base.Array.

CUDAdrv.jl has lost its CuArray type, in favor of CuArrays.jl.

CUDAnative.jl now provides a device-specific runtime library for experimental support of some Julia intrinsics, including dynamic allocations (no GC), boxing and unboxing, and bounds errors. This is a small subset of the Julia runtime library, and currently only serves to support exceptions as they occur in CuArrays.jl. The old exception support has been removed, so this could be breaking for some applications (please file bugs if that happens).