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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

Supported by

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