Function¶
Transfer array¶
OrchesPy provides a function to transfer an ndarray to a specified device in a portable way.
Example 1:
>>> import orchespy
>>> import orchespy.devicetype
>>> import nlcpy
>>> import cupy
>>> x = nlcpy.asarray([1, 2, 3])
>>> y = orchespy.transfer_array(x, orchespy.devicetype.CUDAGPU())
>>> y
array([1, 2, 3])
>>> isinstance(y, cupy.ndarray)
True
An NLCPy ndarray x
is transferred to GPU as a CuPy ndarray
Example 2:
>>> import orchespy
>>> import orchespy.devicetype
>>> import numpy
>>>
>>> dev = orchespy.devicetype.VE
>>> @orchespy.device(dev, numpy_module_arg='xp')
... def create_on_dev(xp):
... return xp.arange(1, 6)
>>>
>>> x = create_on_dev()
>>> print(type(x))
<class 'nlcpy.core.core.ndarray'>
>>>
>>> y = numpy.arange(6, 11)
>>> y_dev = orchespy.transfer_array(y, dev)
>>>
>>> print(x + y_dev)
[ 7 9 11 13 15]
An NumPy ndarray y
is transferred to VE as a NLCPy ndarray.
You can switch the data transfer to GPU
just by changing dev
to “orchespy.devicetype.CUDAGPU”.
Example 3:
>>> import orchespy
>>> from orchespy.devicetype import VE
>>> import numpy as np
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x2 = orchespy.transfer_array(x1, VE(1))
>>> type(x2)
<class 'nlcpy.core.core.ndarray'>
>>> x2.venode.id
1
If you have multiple identical devices, you can specify any device.
Transfer array content¶
You can transfer an array-like to a specified array-like.
Example:
>>> import orchespy
>>> import numpy
>>> import cupy
>>> x = numpy.asarray([1, 2, 3])
>>> y = cupy.asarray([-1, -1, -1])
>>> orchespy.transfer_array_content(y, x)
>>> y
array([1, 2, 3])
>>> isinstance(y, cupy.ndarray)
True
An NumPy ndarray x
is transferred to GPU as a CuPy ndarray.
When the transfer destination is VE, it is transferred as NLCPy ndarray.
It also enables transfer from VE to GPU and transfer from GPU to VE.