Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d2458eb
Initial separation of dparray into 2 parts.
DrTodd13 Nov 25, 2020
6b892ea
Merge branch 'master' into spokhode/dparray
PokhodenkoSA Dec 1, 2020
7311b94
fix comments
vlad-perevezentsev Dec 1, 2020
fb163ec
add tests for dparray
vlad-perevezentsev Dec 1, 2020
f0c3c2b
fix comments
vlad-perevezentsev Dec 2, 2020
935a2a1
use black
vlad-perevezentsev Dec 2, 2020
efcfcd9
fix the error from black and remove one test
vlad-perevezentsev Dec 2, 2020
7ebd06c
Resolve some of the code review issues. Not explicitly checking Numb…
DrTodd13 Dec 3, 2020
9694941
Merge branch 'spokhode/dparray' of https://github.com/IntelPython/dpc…
vlad-perevezentsev Dec 4, 2020
c3cd735
add the new dparray class inder dpctl.dptensor.dparray
vlad-perevezentsev Dec 4, 2020
359b5dc
add the new dparray class inder dpctl.dptensor.dparray
vlad-perevezentsev Dec 4, 2020
65925b6
Add test_dparray.py into test system
PokhodenkoSA Dec 4, 2020
ef2902f
Rename test class for dparray
PokhodenkoSA Dec 4, 2020
a4907dd
Merge branch 'master' into spokhode/dparray
PokhodenkoSA Dec 4, 2020
3c69ed7
Remove formatting of setup.py
PokhodenkoSA Dec 4, 2020
ea5e319
Add license in new files.
PokhodenkoSA Dec 4, 2020
5fbef1c
Remove import dparray from __inti__.pxd
PokhodenkoSA Dec 4, 2020
393b058
Fix merge conflicts
vlad-perevezentsev Dec 7, 2020
bcd7d5f
Merge branch 'develop' of https://github.com/vlad-perevezentsev/dpctl…
vlad-perevezentsev Dec 7, 2020
897afc9
Update MANIFEST.in
PokhodenkoSA Dec 7, 2020
44bbe03
Merge branch 'review-pr-192' into merged-192-200
oleksandr-pavlyk Dec 7, 2020
aebe5b7
Merge branch 'review-pr-200' into merged-192-200
oleksandr-pavlyk Dec 7, 2020
4a7b94e
dpctl.dptensor.ndarray provides proper __sycl_usm_array_interface__
oleksandr-pavlyk Dec 7, 2020
a0da813
package types is not used
oleksandr-pavlyk Dec 7, 2020
0b2931c
Add a remote test and fix black
vlad-perevezentsev Dec 7, 2020
25e864b
dparray.py -> numpy_usm_shared.py
oleksandr-pavlyk Dec 7, 2020
15d0364
changes after renaming dparray.py->numpy_usm_shared.py
oleksandr-pavlyk Dec 7, 2020
2aab77b
black voodoo applied
oleksandr-pavlyk Dec 7, 2020
d53d8b8
more black voodoo
oleksandr-pavlyk Dec 7, 2020
cc2bd6c
Update __init__.pxd
diptorupd Dec 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
dpctl.dptensor.ndarray provides proper __sycl_usm_array_interface__
  • Loading branch information
oleksandr-pavlyk committed Dec 7, 2020
commit 4a7b94ea478d0f29a055b16653510d280d3398a2
43 changes: 40 additions & 3 deletions dpctl/dptensor/dparray.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,19 @@ def dprint(*args):
def has_array_interface(x):
return hasattr(x, array_interface_property)

def _get_usm_base(ary):
ob = ary
while True:
if ob is None:
return None
elif hasattr(ob, '__sycl_usm_array_interface__'):
return ob
elif isinstance(ob, np.ndarray):
ob = ob.base
elif isinstance(ob, memoryview):
ob = ob.obj
else:
return None

class ndarray(np.ndarray):
"""
Expand Down Expand Up @@ -80,7 +93,9 @@ def __new__(
dprint("buffer None new_obj already has sycl_usm")
else:
dprint("buffer None new_obj will add sycl_usm")
setattr(new_obj, array_interface_property, {})
setattr(new_obj,
array_interface_property,
new_obj._getter_sycl_usm_array_interface_())
return new_obj
# zero copy if buffer is a usm backed array-like thing
elif hasattr(buffer, array_interface_property):
Expand All @@ -99,7 +114,8 @@ def __new__(
dprint("buffer None new_obj already has sycl_usm")
else:
dprint("buffer None new_obj will add sycl_usm")
setattr(new_obj, array_interface_property, {})
setattr(new_obj, array_interface_property,
new_obj._getter_sycl_usm_array_interface_())
return new_obj
else:
dprint("dparray::ndarray __new__ buffer not None and not sycl_usm")
Expand Down Expand Up @@ -129,9 +145,29 @@ def __new__(
dprint("buffer None new_obj already has sycl_usm")
else:
dprint("buffer None new_obj will add sycl_usm")
setattr(new_obj, array_interface_property, {})
setattr(new_obj, array_interface_property,
new_obj._getter_sycl_usm_array_interface_())
return new_obj


def _getter_sycl_usm_array_interface_(self):
ary_iface = self.__array_interface__
_base = _get_usm_base(self)
if _base is None:
raise TypeError

usm_iface = getattr(_base, '__sycl_usm_array_interface__', None)
if usm_iface is None:
raise TypeError

if (ary_iface['data'][0] == usm_iface['data'][0]):
ary_iface['version'] = usm_iface['version']
ary_iface['syclobj'] = usm_iface['syclobj']
else:
raise TypeError
return ary_iface


def __array_finalize__(self, obj):
dprint("__array_finalize__:", obj, hex(id(obj)), type(obj))
# When called from the explicit constructor, obj is None
Expand All @@ -156,6 +192,7 @@ def __array_finalize__(self, obj):
"Non-USM allocated ndarray can not viewed as a USM-allocated one without a copy"
)


# Tell Numba to not treat this type just like a NumPy ndarray but to propagate its type.
# This way it will use the custom dparray allocator.
__numba_no_subtype_ndarray__ = True
Expand Down