CUDA.jl
repository·main·Indexed 23 days ago
https://github.com/juliagpu/cuda.jlThe primary interface for NVIDIA CUDA GPU programming in Julia. It provides high-level array abstractions, a compiler for writing custom kernels via the @cuda macro, and wrappers for standard CUDA libraries including cuBLAS, cuDNN, cuFFT, cuRAND, cuSPARSE, cuSOLVER, cuTENSOR, cuStateVec, cuTensorNet, and NVML. The ecosystem includes CUDACore.jl for fundamental building blocks and CUDATools.jl for profiling and debugging.
What's inside CUDA.jl
- cuSOLVER.jl is a Julia wrapper for NVIDIA's cuSOLVER library. It provides GPU-accelerated linear solvers and matrix factorizations, including LU, QR, SVD, and eigensolvers. It is part of the CUDA.jl ecosystem.
Overview of cuDNN.jl
maincuDNN.jl is a Julia wrapper for NVIDIA cuDNN that provides GPU-accelerated neural-network primitives specifically for
CuArrayvalues. It is part of theCUDA.jlrepository and is organized into several layers:- Raw Bindings:
libcudnn.jlprovides the generated bindings for the raw C API. - Backend API:
backend.jlwrapscudnnBackendDescriptor_tusing typed descriptor helpers. - Graph API: The
graph/directory provides a high-level Julia frontend includingGraph,Tensor, operation factories, heuristics, plan caching, and execution. - Operations API: The
ops/directory exposes Julia-facing operations likeattention!,convolution!, pooling, and batch normalization for use by downstream packages. - Legacy Wrappers: Fixed-function compatibility wrappers are located in
src/legacy(e.g., for older API patterns), while Softmax, dropout, and RNN are managed outside the legacy system.
- Raw Bindings:
Overview of cuBLAS.jl
mainOverview of CUDACore.jl
mainCUDACore.jl is the core package for CUDA programming in the Julia ecosystem. It provides the fundamental building blocks for GPU computing, including:
- GPU array abstractions: Interfaces for working with data on the GPU.
- Kernel compilation: Tools to compile and launch CUDA kernels.
- Memory management: Handling data movement and allocation between host and device.
- CUDA driver/runtime interface: Low-level access to the CUDA driver and runtime APIs.
Overview of cuSPARSE.jl
maincuSPARSE.jl is a Julia wrapper for NVIDIA's cuSPARSE library. It provides GPU-accelerated sparse matrix operations and is a component of the CUDA.jl ecosystem.Overview of NVML.jl
mainNVML.jl is a Julia wrapper for the NVIDIA Management Library (NVML). It is used for monitoring and managing NVIDIA GPU devices, allowing users to access metrics such as temperature, power usage, utilization, and memory statistics directly from Julia. It is part of the CUDA.jl ecosystem.Overview of CUDATools.jl
mainCUDATools.jl is a package within the CUDA.jl ecosystem that provides diagnostic and utility tools for CUDA programming in Julia. It is designed to help developers monitor, profile, and debug their GPU workloads.
Key capabilities include:
- Profiling: Integration with NVIDIA CUPTI.
- Device Monitoring: Access to NVIDIA Management Library (NVML) for monitoring device state.
- Debugging: Various helpers to assist in CUDA debugging processes.
Overview of cuTENSOR.jl
mainOverview of cuRAND.jl
mainOverview of CUPTI.jl
mainCUPTI.jl is a Julia wrapper for the NVIDIA CUPTI (CUDA Profiling Tools Interface). It provides capabilities for GPU profiling and performance analysis within the Julia ecosystem and is part of the CUDA.jl project.Overview of cuTensorNet.jl
maincuTensorNet.jl is a Julia wrapper for NVIDIA's cuTensorNet. It provides GPU-accelerated tensor network computations and is part of the CUDA.jl ecosystem.Use cuSPARSE for sparse linear algebra
mainThecuSPARSEmodule provides Julia bindings to the NVIDIA cuSPARSE library, enabling high-performance sparse matrix operations on CUDA devices. It is part of theCUDA.jlecosystem. To use it, ensure you have thecuSPARSEmodule available in your environment, typically by installingCUDA.jlwhich manages the necessary dependencies.