inducer / pycuda

CUDA integration for Python, plus shiny features
http://mathema.tician.de/software/pycuda
Other
1.85k stars 288 forks source link

`register_host_memory` fails for numpy array created `frombuffer` #459

Open amishatishpatel opened 2 months ago

amishatishpatel commented 2 months ago

Bug description

Cannot pycuda.driver.register_host_memory using numpy array that was created frombuffer.

Error thrown

ValueError: Cannot set the NumPy array 'base' dependency more than once

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/path/to/my_test_file/./test_pycuda.py", line 12, in <module>
    pycuda.driver.register_host_memory(array)
SystemError: <Boost.Python.function object at 0x1b80350> returned a result with an exception set

Browsing other issues raised, this might relate to issue https://github.com/inducer/pycuda/issues/450 and PR #451.

However, this is reproducible with numpy==1.26.2 (not numpy 2.0 or newer).

Steps to reproduce

Executing the following minimum working example with pycuda==2024.1.2 results in the above error. Note that executing the same minimum working example with pycuda==2023.1 does not throw an error.

#!/usr/bin/env python3

import mmap

import numpy as np
import pycuda.autoinit
import pycuda.driver

size = 1024 * 2048
mapping = mmap.mmap(-1, size, flags=mmap.MAP_SHARED)
array = np.frombuffer(mapping, np.uint8)
pycuda.driver.register_host_memory(array)

Expected behaviour

I'd like this to be fixed, please. This is quite key in (our) benchmarking of GPU (htod, dtoh) performance, if/when we do upgrade to the latest pycuda.

Environment

Additional context Belated apologies in advance if I've misinterpreted the error/this is already on your radar. Figured I'd flag it anyway, just to be safe.