Discussion:
[PyCUDA] How can I emulated numpy-style index arrays?
Rasmus Diederichsen
2018-07-24 09:24:40 UTC
Permalink
Good day, list.

In numpy, one can use arrays of ints to select a non-contiguous subarray, but the same does not work in Pycuda (only slices, ellipses and ints). Is there a straightforward way to emulate this behaviour (maybe use some memcpy call to extract the relevant data)?

Cheers,
Rasmus
Syam Gadde
2018-07-24 13:12:50 UTC
Permalink
Could you use gpuarray.take()? There is also apparently an undocumented multi_take(), but I don't know how it works. If you absolutely need the slicing syntax, it probably wouldn't be hard to modify __getitem__ to use take/multi_take.


-syam


________________________________
From: PyCUDA <pycuda-***@tiker.net> on behalf of Rasmus Diederichsen <***@gmail.com>
Sent: Tuesday, July 24, 2018 5:24:40 AM
To: ***@tiker.net
Subject: [PyCUDA] How can I emulated numpy-style index arrays?

Good day, list.

In numpy, one can use arrays of ints to select a non-contiguous subarray, but the same does not work in Pycuda (only slices, ellipses and ints). Is there a straightforward way to emulate this behaviour (maybe use some memcpy call to extract the relevant data)?

Cheers,
Rasmus
Rasmus Diederichsen
2018-07-24 13:42:36 UTC
Permalink
I was investigating this, but take() only seems to accept an array of integer indices, which would help in the 1d-case, but if I want to do it in multiple dimensions or pass e.g. : for those, it doesn't help.

I don't understand what's going on in multi_take either, but "multi" seems to be about multiple arrays, not multiple dimensions.
Post by Syam Gadde
Could you use gpuarray.take()? There is also apparently an undocumented multi_take(), but I don't know how it works. If you absolutely need the slicing syntax, it probably wouldn't be hard to modify __getitem__ to use take/multi_take.
-syam
Sent: Tuesday, July 24, 2018 5:24:40 AM
Subject: [PyCUDA] How can I emulated numpy-style index arrays?
Good day, list.
In numpy, one can use arrays of ints to select a non-contiguous subarray, but the same does not work in Pycuda (only slices, ellipses and ints). Is there a straightforward way to emulate this behaviour (maybe use some memcpy call to extract the relevant data)?
Cheers,
Rasmus
Loading...