Skip to main content

Module that extends setuptools functionality for building hybrid C++ and CUDA extension for Python wrapper modules.

Project description

Setuptools CUDA C++

PyPI - Version PyPI - Python Version GitHub - Dependencies GitHub - Issues GitHub - Last commit

The setuptools-cuda-cpp is a module that extends setuptools functionality for building hybrid C++ and CUDA extensions for Python wrapper modules.


Table of Contents

Summary

This project meant to be a soft solution to include mixed c++/CUDA extensions in your projects, no matter if you are using old python version (3.6+) or old GPU drivers (sm/compute arch 3.0+).

Features

  • Python version >= 3.6 .
  • SM(StreamingMultiprocessor)/Compute architecture >= 3.0 .
  • Cython compatible but not mandatory.
  • Any CUDA version (since you can configure nvcc flags).
  • Preloaded flags for cpp and CUDA compilers.
  • Mixed compilations (.cpp and .cu files can be included in a single extension).
  • Advanced find_cuda features (automatically try to find the CUDAHOME directory).
  • Include NVIDIA Management Library (NVML) capabilities info.

Installation

pip install setuptools-cuda-cpp

Usage

Add the library to your project configuration files ("pyproject.toml" and/or "setup.py/.cfg").

1. Example for "legacy build" (old python versions with setuptools < 61.0.0):

setup.py

from pathlib import Path
from setuptools import setup
from setuptools_cuda_cpp import CUDAExtension, BuildExtension, fix_dll

cuda_ext_path = Path('src/my_cuda_package/cuda_ext')
cuda_ext = CUDAExtension(
    name='my_cuda_package.cuda_ext',
    include_dirs=[cuda_ext_path / 'include'],
    sources=[
        cuda_ext_path / 'cuda_ext.cu',
        cuda_ext_path / 'cuda_ext_wrapper.cpp',
    ],
    libraries=fix_dll(['cudart']),  # Use fix_dll() only for Windows compatibility (check documentation for more info).
    extra_compile_args={
        'cxx': ['-g'],  # cpp compiler flags
        'nvcc': ['-O2'],  # nvcc flags
    },
)

setup(
    name='my-cuda-package',
    version='0.0.1',
    install_requires=['numpy', ],
    extras_require={'cython': ['cython'], },
    ext_modules=[cuda_ext],
    cmdclass={'build_ext': BuildExtension},
)

You can also use pyproject.toml with Flit making a custom build-backend.

2. Example for "pyproject.toml build" (with setuptools >= 61.0.0):

pyproject.toml

[build-system]
requires = ["setuptools-cuda-cpp", "flit_core >=3.2,<4", "wheel", "cython"]
build-backend = "flit_core.buildapi"

[project]
name = "my-cuda-package"
dependencies = ["numpy"]
dynamic = ["version", "description"]
# ...

And configure the setup.py for the different extensions you want to use:

setup.py

from pathlib import Path
from setuptools import setup
from setuptools_cuda_cpp import CUDAExtension, BuildExtension, fix_dll

cuda_ext_path = Path('src/my_cuda_package/cuda_ext')
cuda_ext = CUDAExtension(
    name='my_cuda_package.cuda_ext',
    include_dirs=[cuda_ext_path / 'include'],
    sources=[
        cuda_ext_path / 'cuda_ext.cu',
        cuda_ext_path / 'cuda_ext_wrapper.cpp',
    ],
    libraries=fix_dll(['cudart']),  # Use fix_dll() only for Windows compatibility (check documentation for more info).
    extra_compile_args={
        'cxx': ['-g'],  # cpp compiler flags
        'nvcc': ['-O2'],  # nvcc flags
    },
)

setup(
    ext_modules=[cuda_ext],
    cmdclass={'build_ext': BuildExtension},
)

Issues

If you receive a EnvironmentError exception you should set CUDAHOME environment variable pointing to the CUDA installation path. This would happen if the find_cuda() method is not capable of locate it. As reference the directory should contain:

CUDAHOME
├── bin
│   └── nvcc
├── include
│   └── cudart.h
├── lib
└── nvml

License

setuptools-cuda-cpp is distributed under the terms of the MIT license.

Acknowledgements

The package is based on cpp_extension, but it also includes:

  • Support for deprecated older architectures (from sm / compute 3.0).
  • Improved find_cuda system.
  • Pathlib library and Windows missing dll support.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

setuptools-cuda-cpp-0.1.8.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

setuptools_cuda_cpp-0.1.8-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file setuptools-cuda-cpp-0.1.8.tar.gz.

File metadata

  • Download URL: setuptools-cuda-cpp-0.1.8.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for setuptools-cuda-cpp-0.1.8.tar.gz
Algorithm Hash digest
SHA256 7b17eef33060c8b6dc36a8e9f86d6e5ac69a4b6f33f3884d85b8ab05a9526b92
MD5 8ee5c46fc5678b932a877351fcf5539a
BLAKE2b-256 442d0d18183db086bd1386410a8baed4b71ce050648d399efc2fdbabb60032b8

See more details on using hashes here.

File details

Details for the file setuptools_cuda_cpp-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for setuptools_cuda_cpp-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 809d018d513e17ac32d4d97ad01c03713b9e1978bae3037eda4f8b3919b76ee2
MD5 0763abd4379708161c15abe41fc9aac5
BLAKE2b-256 0a4b9a0a263f0a650dd5942030c79d372828e7a8097e643ca17bcceabfdca5f6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page