fix: NVCC 11.4.0 - 11.8.0 host bug workaround (#4220)

* Work-Around: NVCC 11.4.0 - 11.8.0

Adds a targeted NVCC work around for limited number of CUDA
releases. Fixed in NVCC development.

* style: pre-commit fixes

* CI: Bump CTK Version 11.2 -> 11.7

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Axel Huebl 2022-10-06 21:02:57 -07:00 committed by GitHub
parent 864ed1120c
commit 6cb214748d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 2 deletions

View File

@ -324,8 +324,8 @@ jobs:
# Testing NVCC; forces sources to behave like .cu files # Testing NVCC; forces sources to behave like .cu files
cuda: cuda:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: "🐍 3.8 • CUDA 11.2 • Ubuntu 20.04" name: "🐍 3.10 • CUDA 11.7 • Ubuntu 22.04"
container: nvidia/cuda:11.2.2-devel-ubuntu20.04 container: nvidia/cuda:11.7.0-devel-ubuntu22.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3

View File

@ -1578,6 +1578,22 @@ public:
return *this; return *this;
} }
// Nvidia's NVCC is broken between 11.4.0 and 11.8.0
// https://github.com/pybind/pybind11/issues/4193
#if defined(__CUDACC__) && (__CUDACC_VER_MAJOR__ == 11) && (__CUDACC_VER_MINOR__ >= 4) \
&& (__CUDACC_VER_MINOR__ <= 8)
template <typename T, typename... Extra>
class_ &def(const T &op, const Extra &...extra) {
op.execute(*this, extra...);
return *this;
}
template <typename T, typename... Extra>
class_ &def_cast(const T &op, const Extra &...extra) {
op.execute_cast(*this, extra...);
return *this;
}
#else
template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra> template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
class_ &def(const detail::op_<id, ot, L, R> &op, const Extra &...extra) { class_ &def(const detail::op_<id, ot, L, R> &op, const Extra &...extra) {
op.execute(*this, extra...); op.execute(*this, extra...);
@ -1589,6 +1605,7 @@ public:
op.execute_cast(*this, extra...); op.execute_cast(*this, extra...);
return *this; return *this;
} }
#endif
template <typename... Args, typename... Extra> template <typename... Args, typename... Extra>
class_ &def(const detail::initimpl::constructor<Args...> &init, const Extra &...extra) { class_ &def(const detail::initimpl::constructor<Args...> &init, const Extra &...extra) {