# Weak dependence on CUDA packages, 2019 version

**URL:** <https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033>\
**Category:** GPU\
**Created:** [September 21, 2019, 10:07pm UTC](https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033 "2019-09-21T22:07:37Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![dfdx](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dfdx/32/120_2.png) [@dfdx](https://discourse.julialang.org/u/dfdx)\
**Post date:** [September 21, 2019, 10:07pm UTC](https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033/1 "2019-09-21T22:07:37Z")

</div>

What’s state of the art for writing code with weak dependence on CUDA, e.g. when you want to provide automatic speedup if GPU is available, but provide fallback for systems with only CPUs? I remember a lot of discussion about it, but things seems to have been improved since the last time I checked it. In particular:

1. Is it safe to add CuArrays and CUDAnative as dependencies to a general-purpose project if they are not loaded by default (e.g. when all calls to them are wrapped into `Requires.@required`)?
2. How to safely detect if CUDA is available in the system? Something like `@cuda_available` macro.

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [September 21, 2019, 10:49pm UTC](https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033/2 "2019-09-21T22:49:54Z")

</div>

FYI Pkg.jl may implement more direct solution soon:

[https://github.com/JuliaLang/Pkg.jl/issues/1285](https://github.com/JuliaLang/Pkg.jl/issues/1285)

---

<div class="post-metadata">

**Author:** ![maleadt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maleadt/32/10097_2.png) [@maleadt](https://discourse.julialang.org/u/maleadt)\
**Post date:** [September 22, 2019, 10:34am UTC](https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033/3 "2019-09-22T10:34:12Z")

</div>

Awaiting that, you can use CUDAapi to know if you can load CUDAnative/CuArrays: [CuArrays/CUDAnative PSA: Simplified package loading](https://discourse.julialang.org/t/cuarrays-cudanative-psa-simplified-package-loading/27897)

---

<div class="post-metadata">

**Author:** ![dfdx](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dfdx/32/120_2.png) [@dfdx](https://discourse.julialang.org/u/dfdx)\
**Post date:** [September 22, 2019, 2:11pm UTC](https://discourse.julialang.org/t/weak-dependence-on-cuda-packages-2019-version/29033/4 "2019-09-22T14:11:48Z")

</div>

Thanks! This is pretty much like what I was looking for.
